Tomcat 8 lancer - org.apache.catalina.webresources.Le Cache.getResource Impossible d'ajouter la ressource
J'ai juste mis à niveau Tomcat à partir de la version 7.0.52 à 8.0.14.
Je reçois ce pour beaucoup de statique des fichiers image:
org.apache.catalina.webresources.Le Cache.getResource Impossible d'ajouter l'
de la ressource [/base/1325/WA6144-150x112.jpg] pour le cache, car il n'y
a pas suffisamment d'espace libre disponible après l'expulsion cache
entrées d'envisager d'augmenter la taille maximale de la mémoire cache
Je n'ai pas précisé de quelle ressource particulière, paramètres, et je n'ai pas ce pour 7.0.52.
J'ai trouvé mention de ce qui se passe au démarrage dans un rapport de bug qui devait être corrigée. Pour moi ce n'est pas au démarrage mais en permanence lorsque la ressource est demandée.
Quelqu'un d'autre d'avoir ce problème?
Essayer au moins, il suffit de désactiver le cache, mais je ne peux pas trouver un exemple de la façon de spécifier de ne pas utiliser le cache. Les attributs ont disparu à partir du contexte dans Tomcat version 8. Ont essayé d'ajouter une ressource, mais ne peut pas obtenir la config droit.
<Resource name="file"
cachingAllowed="false"
className="org.apache.catalina.webresources.FileResourceSet"
/>
Grâce.
- Pas de réponses, je suppose que je dois être la seule personne avec ce problème.
- La Solution est ici: serverfault.com/questions/644415/...
- Concernant le manque d'attribut dans Tomcat 8 contexte, voici un extrait du guide de migration (l'emphase est mienne): "Le refactoring de ressources a également entraîné une nombre d'attributs être retiré à partir du Contexte par défaut de mise en œuvre (org.apache.catalina.de base.StandardContext). Les attributs suivants peut maintenant être configuré via la mise en œuvre des ressources utilisé par l'application web". Plus d'infos dans la migration guid>.
- n'ayant jamais sélectionné une réponse correcte au bout de 2 ans, nous pouvons convenir qu'il fonctionne dans les deux sens?
Vous devez vous connecter pour publier un commentaire.
Dans votre
$CATALINA_BASE/conf/context.xml
ajouter le bloc ci-dessous avant de</Context>
Pour plus d'informations: http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html
J'ai eu le même problème lors de la mise à niveau de Tomcat 7 à 8: en continu d'une grande inondation journal des avertissements à propos de cache.
1. Réponse Courte
Ajouter dans le
Contexte
élément xml de votre$CATALINA_BASE/conf/context.xml
:Donc la valeur par défaut est
10240
(10 mo), afin de définir une taille de plus que cela. De tune pour optimiser les paramètres d'où les mises en garde disparaître.Notez que les avertissements peut revenir sous un trafic élevé situations.
1.1 La cause (courte explication)
Le problème est causé par Tomcat étant pas en mesure d'atteindre son objectif taille du cache dû à des entrées de cache qui sont moins de la durée de vie de ces entrées. Donc, Tomcat n'ai pas assez d'entrées de cache qu'il risque d'expirer, parce qu'ils étaient trop frais, de sorte qu'il ne pouvait pas libre de suffisamment de mémoire cache et donc les sorties de mises en garde.
Le problème n'apparaît pas dans Tomcat 7, parce que Tomcat 7 n'a tout simplement pas de sortie avertissements dans cette situation. (À l'origine vous et moi, à une mauvaise configuration de cache sans en être averti.)
Le problème apparaît lors de la réception d'une relative grande quantité de requêtes HTTP pour les ressources (généralement statique) dans une relative courte période de temps par rapport à la taille et la durée de vie de la cache. Si le cache est pour atteindre son maximum (10 mo par défaut) avec plus de 95% de sa taille-douce avec les entrées du cache (frais signifie moins de moins de 5 secondes dans le cache), que vous obtiendrez un message d'avertissement pour chaque webResource que Tomcat essaie de charger dans le cache.
1.2 Option info
Utiliser JMX si vous avez besoin de tune cacheMaxSize sur un serveur en cours d'exécution, sans avoir à redémarrer il.
La solution la plus rapide serait de désactiver complètement le cache:
<Resources cachingAllowed="false" />
, mais c'est sous-optimale, donc, l'augmentation de cacheMaxSize que je viens de décrire.2. Réponse Longue
2.1 Contexte de l'information
Un WebSource est un fichier ou d'un répertoire dans une application web. Pour des raisons de performances, Tomcat peut mettre en cache WebSources. Le maximum de la ressource statique de cache (toutes les ressources au total) est par défaut 10240 ko (10 mo). Un webResource est chargé dans le cache lors de la webResource est demandée (par exemple lors du chargement d'une image statique), il est alors appelé une entrée du cache.
Chaque entrée du cache a un TTL (time to live), qui est le temps que l'entrée de cache est autorisé à rester dans le cache. Lorsque la durée de vie expire, l'entrée de cache est admissible à être supprimé du cache. La valeur par défaut de la cacheTTL est de 5000 millisecondes (5 secondes).
Il n'y a plus à dire sur la mise en cache, mais c'est sans importance pour le problème.
2.2 La cause
Le code suivant à partir de la Classe de Cache montre la politique de mise en cache dans le détail:
Lors du chargement d'un webResource, le code calcule la nouvelle taille de la mémoire cache. Si le calcul de la taille est supérieure à la taille maximale par défaut, que l'un ou plusieurs entrées mises en cache doivent être enlevées, sinon la nouvelle taille de dépasser le maximum. Ainsi, le code calcule un "targetSize", qui est la taille de la mémoire cache a envie de rester sous (comme un optimum), qui est par défaut à 95% du maximum. Afin d'atteindre cet targetSize, les inscriptions devront être enlevés/supprimé du cache. Ceci est fait en utilisant le code suivant:
Donc une entrée de cache est supprimé lorsque la durée de vie est expiré et que le targetSize n'a pas encore été atteint.
Après la tentative de libérer le cache expulser les entrées du cache, du code:
Donc, si après la tentative de libérer le cache, la taille dépasse toujours le maximum, il affichera le message d'avertissement de ne gratuit:
2.3 Le problème
De sorte que le message d'avertissement dit, le problème est
Si votre application web charge beaucoup de cache webResources (environ maximale de la mémoire cache, par défaut de 10 mo) à l'intérieur d'un court laps de temps (5 secondes), vous obtenez le message d'avertissement.
La confusion, c'est que Tomcat 7 ne pas afficher l'avertissement. C'est tout simplement causée par le serveur Tomcat 7 code:
combiné avec:
Donc Tomcat 7 n'a tout simplement pas de sortie aucun avertissement à tous quand il est incapable de dégager le cache, alors que Tomcat 8 affichera un avertissement.
Donc, si vous utilisez Tomcat 8 avec la même mise en cache par défaut configuration de Tomcat 7, et vous avez eu des avertissements dans Tomcat 8, que votre (et le mien) paramètres de mise en cache de Tomcat 7 ont été peu performants sans avertissement.
2.4 Solutions
Il y a plusieurs solutions:
2.4.1. Augmentez la taille du cache (recommandé)
Comme décrit ici: http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html
En ajoutant
<Resources cacheMaxSize="XXXXX" />
dans leContext
élément$CATALINA_BASE/conf/context.xml
, où "XXXXXX" représente une augmentation de la taille de la mémoire cache, spécifié en kilo-octets. La valeur par défaut est 10 240 (10 mo), afin de définir une taille de plus que cela.Vous aurez à régler pour les paramètres optimum. Notez que le problème peut revenir quand vous avez soudainement une augmentation du trafic/demandes de ressources.
Pour éviter d'avoir à redémarrer le serveur à chaque fois que vous voulez essayer une nouvelle taille de la mémoire cache, vous pouvez le modifier sans avoir à redémarrer en utilisant JMX.
À activer JMX, ajoutez ceci à
$CATALINA_BASE/conf/server.xml
dans leServer
élément:<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="6767" rmiServerPortPlatform="6768" />
et téléchargercatalina-jmx-remote.jar
de https://tomcat.apache.org/download-80.cgi et le mettre dans$CATALINA_HOME/lib
.Ensuite, utilisez jConsole (livré par défaut avec le JDK Java) à se connecter via JMX pour le serveur et regardez à travers les paramètres de réglage pour augmenter la taille du cache alors que le serveur est en cours d'exécution. Les modifications de ces paramètres devrait prendre effet immédiatement.
2.4.2. Baisser la TTL (non recommandé)
Baisser le
cacheTtl
valeur par quelque chose d'inférieur à 5000 millisecondes et à l'écoute pour des réglages optimaux.Par exemple:
<Resources cacheMaxSize="2000" />
Cela vient effectivement d'avoir un remplissage et un cache dans la ram sans l'utiliser.
2.4.3. Supprimer le cache du journal des mises en garde (non recommandé)
Configuration de la journalisation pour désactiver la journalisation
org.apache.catalina.webresources.Cache
.Pour plus d'informations sur la journalisation dans Tomcat: http://tomcat.apache.org/tomcat-8.0-doc/logging.html
2.4.4. Désactiver le cache
Vous pouvez désactiver le cache en paramètre
cachingAllowed
àfalse
.<Resources cachingAllowed="false" />
Bien que je me souviens que dans une version bêta de Tomcat 8, j'ai été en utilisant JMX pour désactiver le cache. (Je ne sais pas exactement pourquoi, mais il y a peut être un problème avec la désactivation du cache via server.xml.)
Vous avez plus de ressources statiques que le cache a de la place pour. Vous pouvez effectuer l'une des opérations suivantes:
Pour plus de détails, voir le la documentation pour ces options de configuration.
Dans le cas où il aide à quelqu'un d'autre, la seule façon que j'ai été en mesure de résoudre ce problème est d'ajouter la ligne suivante à
conf/logging.properties
:Ce filtre “Impossible d'ajouter la ressource” des journaux, qui sont au niveau d'ALERTE.