Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Java > Développement Web en Java > Tomcat

Réponse
 
Outils de la discussion
Vieux 10/08/2008, 17h05   #1 (permalink)
Membre Confirmé
 
Avatar de liquideshark
 
Date d'inscription: septembre 2006
Messages: 237
Par défaut Horrible Exception: java.lang.OutOfMemoryError: PermGen space

Saut tout le monde,

J'ai un serveur Tomcat 6.0.16. j'ai dessus environs 7 applications et de temps en temps il me genere cette exeption
Code :
Horrible Exception: java.lang.OutOfMemoryError: PermGen space
sur la page web.
J'ai essayé de palier au probléme en inscrivant dans le catalina.bat en inscrivant
Code :
JAVA_OPS -XMX1280
Avec 2G0 sur le serveur

Merci pour votre aide
__________________
===================================
===Accroche ta charrue à l'Open source===
===================================
liquideshark est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/08/2008, 21h41   #2 (permalink)
Membre Confirmé
 
Date d'inscription: mars 2006
Messages: 285
Par défaut

J'ai eu ce pb et cela venait de thread non clôturés à savoir:
- resultset non clos (je passais la connexion en paramètre et elle était close))
- pb d'enregistrement de données dans un fichier properties
Pour le premier point en scrutant le code ça a été vite traité mais pour le second point c'est la chance.

Il te faudrai essayer de cerner l'appli(s) qui fou le bazard par éléminination et la passer éventuellement au profiler si tu es sur du code.

Courage pour moi ça a duré 6 mois pour une appli.
Mengué georges est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 16/08/2008, 11h57   #3 (permalink)
Membre régulier

 
Avatar de julien.dubois
 
Date d'inscription: juillet 2007
Messages: 113
Par défaut

Pour augmenter le PermGen, il te faut plutôt utiliser l'argument "-XX:MaxPermSize", par exemple en mettant "-XX:MaxPermSize=256m".

Par défaut le PermGen n'est pas très gros, donc si tu as beaucoup d'applications ce n'est pas forcément certain que tu aies un soucis. Regarde plutôt celles qui utilisent Hibernate, Spring, ou de l'AOP, généralement ce sont celles-là qui font monter ton PermGen. Regarde également si ton PermGen n'augmente pas quand tu redéploye une application à chaud, c'est un problème fréquent.
__________________
Julien Dubois

http://www.springsource.fr
julien.dubois est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 00h43   #4 (permalink)
Membre Confirmé
 
Avatar de liquideshark
 
Date d'inscription: septembre 2006
Messages: 237
Par défaut

Citation:
Envoyé par julien.dubois Voir le message
Pour augmenter le PermGen, il te faut plutôt utiliser l'argument "-XX:MaxPermSize", par exemple en mettant "-XX:MaxPermSize=256m".

Par défaut le PermGen n'est pas très gros, donc si tu as beaucoup d'applications ce n'est pas forcément certain que tu aies un soucis. Regarde plutôt celles qui utilisent Hibernate, Spring, ou de l'AOP, généralement ce sont celles-là qui font monter ton PermGen. Regarde également si ton PermGen n'augmente pas quand tu redéploye une application à chaud, c'est un problème fréquent.
salut j'ai mis le -XX:MaxPermSize=1024m sachant que j'ai 2GB dans la ram mais il y a toujours le même problème!!
En attendant une solution à ce probleme jai mis un cron tab qui redemare le server chaque 4h.

Je recherche toujours la solution
__________________
===================================
===Accroche ta charrue à l'Open source===
===================================
liquideshark est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 09h28   #5 (permalink)
Membre habitué
 
Avatar de aperrin
 
Date d'inscription: octobre 2005
Localisation: Lorraine
Âge: 36
Messages: 154
Par défaut

Après plusieurs recherches j'ai trouvé ce poste qui explique le mécanisme de déploiement à chaud :
Les mécanismes de déploiement à chaud ou d'interception impliquent généralement la génération de classes (.class) par des bibliotheques telle asm, cglib. Tout ces nouveaux objets sont instanciés dans une zone spéciale de la JVM, la mémoire permanente, PermGen. Apres plusieurs utilisations, ces mécanisment peuvent provoquer un remplissage complet de cette zone et provoquer des erreurs du type PermGen Out of Space. Deux solutions:

* augmenter cette zone avec les parametres -XXermSize -XX:MaxPermSize, mais cela reste un pansement, tôt ou tard, la PermGen sera pleine
* permettre à la JVM d'effectuer des déchargements et du nettoyage de ces objets: -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled

Issu du post suivant :

http://www.developpez.net/forums/d42...ation-memoire/
aperrin est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 10h10   #6 (permalink)
Membre Confirmé
 
Avatar de liquideshark
 
Date d'inscription: septembre 2006
Messages: 237
Par défaut

Citation:
Envoyé par aperrin Voir le message
Après plusieurs recherches j'ai trouvé ce poste qui explique le mécanisme de déploiement à chaud :
Les mécanismes de déploiement à chaud ou d'interception impliquent généralement la génération de classes (.class) par des bibliotheques telle asm, cglib. Tout ces nouveaux objets sont instanciés dans une zone spéciale de la JVM, la mémoire permanente, PermGen. Apres plusieurs utilisations, ces mécanisment peuvent provoquer un remplissage complet de cette zone et provoquer des erreurs du type PermGen Out of Space. Deux solutions:

* augmenter cette zone avec les parametres -XXermSize -XX:MaxPermSize, mais cela reste un pansement, tôt ou tard, la PermGen sera pleine
* permettre à la JVM d'effectuer des déchargements et du nettoyage de ces objets: -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled

Issu du post suivant :

http://www.developpez.net/forums/d42...ation-memoire/
Super merci j'ai pris note. ca devrais regler mon problème
__________________
===================================
===Accroche ta charrue à l'Open source===
===================================
liquideshark est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 10h42   #7 (permalink)
Membre habitué
 
Avatar de aperrin
 
Date d'inscription: octobre 2005
Localisation: Lorraine
Âge: 36
Messages: 154
Par défaut

Cela étant je suis assez d'accord avec les post du dessus, a savoir de rechercher la (les) cause(s) qui ont abouties à ce problème et d'y remédier.
aperrin est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 21/08/2008, 10h54   #8 (permalink)
Membre régulier

 
Avatar de julien.dubois
 
Date d'inscription: juillet 2007
Messages: 113
Par défaut

Oui, ce que dit aperrin est 100% le problème. Je parlais d'Hibernate et Spring, par exemple, car ces librairies utilisent CGlib pour générer du code à la volée (attention, ce n'est pas toujours vrai, cela dépend de votre config).
Mais si vous avez des versions stables de ces librairies, vous ne devriez pas avoir de problème, et un MaxPermSize de 1 giga c'est absolument énorme.
Bref vous devriez regarder vos 7 applications plus en détail, il y en a une qui doit utiliser ce type de mécanisme d'une manière complètement folle... Vous pourriez les isoler une à une (en mettant un deuxième Tomcat, avec un Apache devant pour load balancer entre vos deux Tomcat). Ainsi vous verriez laquelle a un souci.
__________________
Julien Dubois

http://www.springsource.fr
julien.dubois est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVAFAQsTUTORIELSJAVASEARCHSOURCESLIVRESOUTILS, EDI & APIECLIPSENETBEANSBLOGDISCUSSIONSTV

Réponse

Précédent   Forum des développeurs > Java > Développement Web en Java > Tomcat

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide