1. Collection de problèmes de paramètres de mémoire Tomcat
Lorsque vous utilisez des programmes Java pour interroger une grande quantité de données de la base de données ou le chargement d'un package JAR par des serveurs d'application (tels que Tomcat, JBoss, Weblogic) apparaîtra. L'exception java.lang.outofMemoryError apparaîtra. Ceci est principalement causé par une mémoire insuffisante dans le serveur d'applications. Cette exception a souvent les situations suivantes (prendre l'environnement Tomcat comme exemple, d'autres serveurs Web tels que JBoss, WebLogic, etc. sont les mêmes):
1. Java.lang.outofMemoryError: Permgen Space
Le nom complet de l'espace Permgen est l'espace de génération permanente, qui fait référence à la zone de stockage permanente de la mémoire OutofMemoryerror: Permgen Space. Du point de vue du texte, c'est un débordement de mémoire et la solution consiste à augmenter la mémoire. Pourquoi la mémoire déborde-t-elle? En effet, cette mémoire est principalement stockée par le JVM en classe et méta-information. La classe est placée dans la zone d'espace Permgen lorsqu'elle est chargée. Il est différent de la zone du tas où l'instance est stockée. GC (Collection Garbage) ne nettoiera pas l'espace Permgen pendant l'exécution du programme principal. Par conséquent, si votre application charge beaucoup de classe, il est très probable qu'une erreur d'espace Permgen se produira. Cette erreur est courante lorsque le serveur Web pré-compile le JSP. Si vous utilisez un grand nombre de pots tiers sous votre application Web, la taille dépasse la taille par défaut de JVM (4M), ce message d'erreur sera généré.
Solution: définissez manuellement la taille maxpermSize
un. Si Tomcat est démarré en mode chauve-souris, les paramètres suivants sont:
Modifier Tomcat_Home / Bin / Catalina.sh
Ajoutez la ligne suivante à "Echo" en utilisant Catalina_Base: $ cataina_base ":
Java_opts = "- server -xx: permSize = 64m -xx: maxpermSize = 128m
né Si Tomcat est enregistré en tant que service Windows et démarré dans les services, la valeur clé correspondante du registre doit être modifiée.
Ouvrez le registre et recherchez le répertoire HKEY_LOCAL_MACHINE / Software / Apache Software Foundation / Procrun 2.0 / HTFTY / Paramètres / Java. Le rouge marqué (tel que HTFTY) dans l'adresse du répertoire doit être modifié en fonction des différentes situations et enregistrer le service Tomcat comme nom du service Windows. Vous pouvez voir les éléments JVMMS et JVMMX, où JVMMS définit les plus petits paramètres d'utilisation de la mémoire, et JVMMX définit les plus grands paramètres d'utilisation de la mémoire. Définissez les valeurs des éléments JVMMS et JVMMX et redémarrez le serveur Tomcat pour prendre effet.
Recommandation: déplacez le même fichier JAR tiers vers le répertoire Tomcat / Shared / Lib, afin de réduire l'utilisation répétée de la mémoire des documents JAR.
2. Java.lang.outofMemoryError: Java Heap Space
Les paramètres du tas JVM se réfèrent aux paramètres de l'espace mémoire que le JVM peut fournir pendant le fonctionnement du programme Java. Lorsque le JVM commencera, il définira automatiquement la valeur de la taille du tas. Son espace initial (c'est-à-dire -XMS) est 1/64 de mémoire physique, et l'espace maximum (-xmx) est 1/4 de mémoire physique. Vous pouvez utiliser le -xmn -xms -xmx et d'autres options fournies par le JVM pour le définir. La taille de la taille du tas est la somme de la jeune génération et de la génération titulaire. Ce message d'exception sera lancé si 98% du temps est utilisé pour GC et que la taille du tas disponible est inférieure à 2%.
Solution: réglez manuellement la taille du tas
un. Si Tomcat est démarré en mode chauve-souris, les paramètres suivants sont:
Modifier Tomcat_Home / Bin / Catalina.sh
Ajoutez la ligne suivante à "Echo" en utilisant Catalina_Base: $ cataina_base ":
Java_opts = "- server -xms800m -xmx800m-xx: maxnewsize = 256m"
né Si Tomcat est enregistré en tant que service Windows et démarré dans les services, la valeur clé correspondante du registre doit être modifiée.
Ouvrez le registre et recherchez le répertoire HKEY_LOCAL_MACHINE / Software / Apache Software Foundation / Procrun 2.0 / HTFTY / Paramètres / Java. Le rouge marqué (tel que HTFTY) dans l'adresse du répertoire doit être modifié en fonction des différentes situations et enregistrer le service Tomcat comme nom du service Windows. Vous pouvez voir les éléments JVMMS et JVMMX, où JVMMS définit les plus petits paramètres d'utilisation de la mémoire, et JVMMX définit les plus grands paramètres d'utilisation de la mémoire. Définissez les valeurs des éléments JVMMS et JVMMX et redémarrez le serveur Tomcat pour prendre effet.
CONSEIL: La taille maximale du tas ne doit pas dépasser 80% de la mémoire physique disponible. Généralement, définissez les options -xms et -xmx à la même chose, tandis que -xmn est 1/4 de la valeur -xmx.
2. Tomcat lui-même ne peut pas fonctionner directement sur l'ordinateur, et il doit s'appuyer sur le système d'exploitation en fonction du matériel et d'une machine virtuelle Java. Lorsque le programme Java est démarré, le JVM alloue une mémoire initiale et une mémoire maximale à l'application. Cette mémoire initiale et cette mémoire maximale affecteront les performances du programme dans une certaine mesure. Par exemple, lorsqu'une application utilise la mémoire maximale, le JVM doit d'abord faire la collecte des ordures et libérer une mémoire occupée. Par conséquent, si vous souhaitez ajuster la mémoire initiale et la mémoire maximale de Tomcat au début, vous devez le déclarer au JVM. Généralement, les programmes Java peuvent ajuster la mémoire initiale et la mémoire maximale de l'application via -XMS -XMX lors de l'exécution: les tailles de ces deux valeurs sont généralement définies en fonction des besoins. La taille du tas d'initialisation exécute la taille de la mémoire que la machine virtuelle demande au système au démarrage. D'une manière générale, ce paramètre n'est pas important. Cependant, certaines applications occuperont rapidement plus de mémoire sous de grandes charges. Pour le moment, ce paramètre est très important. Si la mémoire utilisée est définie pour être petite lorsque la machine virtuelle est démarrée et que de nombreux objets sont initialisés dans ce cas, la machine virtuelle doit augmenter à plusieurs reprises la mémoire pour satisfaire l'utilisation. Pour cette raison, nous définissons généralement -XMS et -XMX pour être de la même taille, et la valeur maximale du tas est limitée par la mémoire physique utilisée par le système. Généralement, les applications avec de grandes quantités de données utiliseront des objets persistants et l'utilisation de la mémoire peut croître rapidement. Lorsque la mémoire requise par l'application dépasse la valeur maximale du tas, la machine virtuelle invitera le débordement de la mémoire et provoquera le plantage du service d'application. Par conséquent, il est généralement recommandé de définir la valeur maximale du tas à 80% de la valeur maximale de la mémoire disponible.
Tomcat peut utiliser la mémoire par défaut est de 128 Mo. Dans les projets d'applications plus importants, cette mémoire n'est pas suffisante et doit être augmentée. Il existe plusieurs façons de choisir:
La première méthode:
Sous Windows, dans le fichier /bin/catalina.bat, Unix, devant le fichier /bin/catalina.sh, ajoutez les paramètres suivants:
Java_opts = '- xms 【Initialiser la taille de la mémoire】 -xmx 【Mémoire maximale qui peut être utilisée】'
Les valeurs de ces deux paramètres doivent être augmentées. Par exemple:
Java_opts = '- xms256m -xmx512m'
Cela signifie que la mémoire d'initialisation est de 256 Mo et que la mémoire maximale qui peut être utilisée est de 512 Mo.
La deuxième méthode: Définissez le nom de la variable dans la variable d'environnement: Java_OPTS Valeur de la variable: -XMS512M -XMX512M
La troisième méthode: les deux premières méthodes visent la situation où Catalina.bat se trouve dans le répertoire bac (comme Tomcat qui est directement décompressée, etc.), mais certaines versions d'installation de Tomcat n'ont pas Catalina.bat. À l'heure actuelle, la méthode suivante peut être utilisée. Bien sûr, cette méthode est également la méthode la plus générale: ouvrir Tomcathome // bin // tomcat5w.exe, cliquez sur l'onglet Java, et vous constaterez qu'il y a deux éléments: pool de mémoire initial et pool de mémoire maximum. Pool de mémoire maximum Il s'agit de la taille maximale de la mémoire. Après le réglage, appuyez sur OK et redémarrez Tomcat. Vous constaterez que la mémoire disponible pour JVM dans Tomcat a changé.
Une autre chose à considérer est le mécanisme de collecte des ordures fourni par Java. La taille du tas de la machine virtuelle détermine le temps et la fréquence des dépenses de la machine virtuelle pour collecter les ordures. La vitesse acceptable de la collecte des ordures est liée à l'application et doit être ajustée en analysant le temps et la fréquence de la collecte réelle des ordures. Si la taille du tas est grande, la collection complète des ordures sera lente, mais la fréquence sera réduite. Si vous faites la taille du tas cohérente avec les besoins en mémoire, la collection complète sera rapide, mais elle sera plus fréquente. Le redimensionnement du tas est de minimiser le temps de collecte des ordures afin de maximiser le traitement des demandes des clients dans un délai précis. Pendant l'analyse comparative, afin d'assurer les meilleures performances, la taille du tas doit être réglée pour être grande pour s'assurer que la collecte des ordures ne se produit pas pendant l'ensemble du processus d'analyse comparative. Si le système passe beaucoup de temps à collecter des ordures, réduisez la taille du tas. Une collection complète des ordures ne doit pas dépasser 3 à 5 secondes. Si la collecte des ordures devient un goulot d'étranglement, la taille de la génération doit être spécifiée, la sortie détaillée de la collecte des ordures est vérifiée et l'impact des paramètres de collecte des ordures sur les performances est étudié. D'une manière générale, vous devez utiliser 80% de la mémoire physique comme taille de tas. Lors de l'ajout du processeur, n'oubliez pas d'augmenter la mémoire, car les allocations peuvent être effectuées en parallèle, tandis que la collecte des ordures n'est pas en parallèle.
Une chose à noter: il est recommandé de réduire la différence entre la valeur la plus élevée et la valeur la plus basse, sinon beaucoup de mémoire sera gaspillée. La valeur la plus basse est augmentée et la valeur la plus élevée peut être définie à volonté, mais elle doit être basée sur la mémoire physique réelle. Si le paramètre de mémoire est trop grand, par exemple, la mémoire maximale est définie, mais s'il n'y a pas de mémoire disponible 512m, Tomcat ne peut pas être démarré. Il peut y avoir une situation où la mémoire est recyclée par le système et terminée le processus.
La méthode ci-dessus pour implémenter le débordement de la mémoire TomCat et le réglage de la taille sont tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.