-
mémoire PermGen saturée
Bonjour,
Nous sommes en train de développer une application web en JEE (hibernate, spring, struts 2, glassfish).
Le problème que nous avons est que la mémoire de la jvm, la PermGen ne fait qu'augmenter à chaque déploiement. Comme si la jvm n'arrivait pas à recycler les classes chargées.
Quelqu'un a-t-il déjà rencontré l'erreur ?
Merci,
Nicolas
-
Ah oui et je ne veux pas augmenter la mémoire de la PermGen car je sais que ça n'arrangerai pas le problème.
-
problème assez courant, pas facile à localiser en général. Quoi que d'habitude c'est tomcat qui présente ces symptômes. Mes recommendations, pour commencer, seraient de voir à utiliser la version la plus récente possible d'hibernate (des versions anciennes étaient combinées à des versions de cglib posant problème). Ou, si c'est proposé par ton conteneur, la version adaptée à ton conteneur (ex: JBoss embarque une version d'hibernate).
Deuxième chose important, vérifie que ton code ne démarre pas de Thread qui continuerait à tourner (même en pause) après redéploiement. Ce thread référence des classes, qui référencent le classloader, qui reste donc en mémoire. Dans le même ordred'idée, s'assurer qu'aucune donnée liée à ton application ne reste dans les Threads via des variables de ype "ThreadLocal" (donc toujours faire un set(null) sur tes ThreadLocal, il ne dois rien rester dans aucun thread).
Troisième chose, lancer un profiler, prendre un des tes class, et regarder sa chaine de référence pour trouver qui continue à en garder une référence.
-
Ok merci pour ta réponse.
En ce qui concerne Hibernate, on a corrigé le problème. On est passé à la dernière version qui utilise javassist. Les fuites de mémoire sont corrigé de ce côté là.
Nous utilisons un framework développé par notre société. En regardant son code, en effet il y a l'utilisation de Thread. Je n'y connais pas grand chose mais je vais me renseigner et voir s'ils sont bien "nettoyés".
As tu un profiler à me conseiller, je n'en ai jamais utilisé.
Merci,
Nicolas
-
Salut!
:tutoriel:
Concernant le profiler, essaye de contacter le FBI afin de savoir s'ils ont des adresses à te donner. :ccool:
Blague à part, des outils tels que JVisualVM, MAT d'Eclipse, JConsole pourraient t'aider.
:lahola:
-
bonjour,
je rencontre cette erreur parfois mais est-ce que le redémarrage d'éditeur ne résoudre pas le problème ???
j'ai des résultats inattendus ..est-ce que cette erreur peut etre l'origine de ça ??
et merci d'avance :ccool:
-
Salut,
qu'appelles-tu éditeur ? Si tu veux parler de glassfish, oui le redémarrage résout le problème. Mais j'aimerai savoir s'il n'y a pas un autre moyen.
Nicolas
-
slt toujours avec cette erreur de mémoire ..j'utilise apache mais lorsque cette erreur m'apparait je dois redémarrer non le serveur mais le pc pour qu'elle disparaisse alors est-ce que je dois aller à la nouvelle version d'hibernate pour résoudre ça ?? et si oui est-ce que ça ne posera pas de problème avec version de spring ou jsf ???
et merciiiii