2017-01-13 3 views
1

Récemment Notre serveur de production: tomcat6 se bloque fréquemment et lance l'erreur suivante: "java.lang.OutOfMemoryError: PermGen space", qui exécute le serveur Windows 2003 avec 4 Go de RAM. 25 applications sont en cours d'exécution sur ce serveur, il semble qu'il a été surchargé, mais il fonctionnait bien auparavant. J'ai essayé de nettoyer les fuites de mémoire comme la fermeture des connexions DB, en augmentant la mémoire Heap avec JAVA_OPTS. Pourtant, je ne pouvais pas trouver la cause exacte. De plus, notre Tomcat6 n'a pas été configuré avec l'application de gestion, donc je n'ai pas pu exécuter de vérification de la mémoire/de l'état de santé. Merci de me guider pour résoudre ce problème.Tomcat6 se bloque fréquemment en raison de: java.lang.OutOfMemoryError: PermGen espace

+1

PermGen est le plus souvent associée à des définitions de classe (et avec certains parseurs XML anciens, IIRC). Vous pourriez vouloir allouer explicitement plus d'espace PermGen puisque vous exécutez 25 applications différentes (probablement chacune avec des versions légèrement différentes des différentes bibliothèques de support). Voir http://stackoverflow.com/questions/3003855/increase-permgen-space – Gus

Répondre

1

Vous devez augmenter l'espace PermGen édition de votre JAVA_OPTS et en utilisant l'option XX: MaxPermSize (par exemple, -XX:MaxPermSize=1024m). L'augmentation de la taille du tas (Xmx) n'est pas utile dans votre cas.

Je propose également l'utilisation d'un outil de surveillance (APM) comme Glowroot pour enquêter sur l'utilisation de la mémoire et d'ajuster votre JAVA_OPTS au besoin.

Pour plus d'informations sur l'objet de l'espace PermGen et son mécanisme de collecte des ordures, regardez cette réponse: https://stackoverflow.com/a/5387423/3260495

+1

Merci @Robert Hume, mais j'ai déjà ajouté MaxPermSize dans JAVA_OPTS avec l'ensemble suivant "JAVA_OPTS =% JAVA_OPTS% -Xms1024m -Xmx1024m -XX: MaxPermSize = 1024m -XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled -server ". Mais ayant toujours le problème, y a-t-il un moyen de savoir si l'instance de tomcat choisit MaxPermSize ou non? APM serait une bonne idée, je vais essayer sur ce – Vic

+0

Considérant que vous n'avez pas le gestionnaire Tomcat, vous pouvez ajouter l'argument '-XX: + PrintCommandLineFlags' à' JAVA_OPTS', redémarrez le serveur, puis vérifiez le 'logs/catalina Fichier .out: vous devriez voir une ligne contenant tous les drapeaux de ligne de commande que vous avez spécifié avec 'JAVA_OPTS'. –

+1

Merci @Robert Hume, même après avoir ajouté l'argument PrintCommandLine à 'JAVA_OPTS' aussi je ne reçois pas de détails dans les journaux. juste une pensée, pour l'instant, y at-il un moyen de savoir si le Tomcat fonctionne ou pas?, par exemple ping de différents serveurs et d'obtenir l'alerte par courriel si tomcat ne répond pas (comme le contrôle de contenu URL), au moins obtenir une action immédiate pendant que le serveur est bloqué – Vic