2009-04-03 7 views
16

J'ai une application Grails qui fait une quantité assez décente de création et destruction d'objets de domaine, et elle semble manquer d'espace PermGen à un rythme très, très rapide. J'ai fait les réglages habituels (PermGen décalé à 256M, activé GC de classe, etc.), mais pas de dés. Est-ce que quelqu'un voudrait recommander certains outils (et, espérons-le, gratuits ou très bon marché) pour résoudre ce type de consommation de mémoire dans Groovy et/ou Java? Ou certaines techniques que vous utilisez pour résoudre les problèmes de mémoire JVM?Dépannage Grailles/Fuites de mémoire Groovy?

Éditer: C'est quand l'application est déployée dans Tomcat en mode de production; Je n'ai pas essayé avec d'autres conteneurs. Même ainsi, ce serait bien d'avoir des ressources pour localiser le problème.

+2

comment avez-vous finir par résoudre votre problème?Nous utilisons la recherche et le quartz (entre autres plugins) et voyons notre augmentation de l'utilisation de l'espace PERMGEN avec à peu près toutes les demandes. – hvgotcodes

Répondre

1

YourKit est un outil sympa que j'ai utilisé plusieurs fois pour diagnostiquer des problèmes de mémoire. Il est commercial, mais il dispose d'une version d'évaluation gratuite disponible pour le débogage one-shot.

1

Le problème que vous rencontrez dans le développement ou la production? Si vous êtes en développement, rappelez-vous que Grails recompile constamment de nombreux aspects de votre application (pas seulement les changements de domaine, mais aussi les changements de contrôleurs et d'autres classes). J'ai aussi des problèmes avec PermGen, mais la plupart sont déclenchés par la recompilation régulière des fichiers sur lesquels je travaille. Vous pouvez désactiver cette fonctionnalité

http://www.grails.org/FAQ#Q:%20OMG%20I%20get%20OutOfMemoryErrors%20or%20PermGen%20Space%20errors%20when%20running%20Grails%20in%20development%20mode.%20What%20do%20I%20do?

Si vous êtes en production, vous avez évidemment un problème beaucoup plus critique. Les problèmes de mémoire de PermGen sont attribués à de nombreux frameworks sur lesquels Grails est construit, y compris Spring, Hibernate et même la propre JVM de Sun. Vous pouvez essayer de modifier la taille maximale du tas pour votre conteneur Web (Tomcat ou Jetty).

Vous pouvez également essayer une implémentation différente de la JVM, comme la JRockit d'Oracle, qui est censée être considérablement meilleure au niveau de la récupération des ordures et d'autres moyens d'efficacité. Je ne l'ai jamais essayé moi-même, mais puisque moi aussi je suis en train de développer un vaste projet de Grails, il se peut que j'achète moi-même des solutions à ces problèmes. Bonne chance!

+0

JRockit est un produit Oracle http://www.oracle.com/technology/software/products/jrockit/index.html –

+0

Je cours en mode production sur Tomcat (6.0.18), et ne fonctionne pas vraiment avoir un choix à propos de la JVM. –

+0

J'ai lu que l'un des problèmes avec la récupération de place dans un conteneur Web est que la pile n'est réellement actualisée que lorsque le conteneur est redémarré. (Redémarrer le conteneur équivaut à redémarrer le service Tomcat, pas simplement redémarrer une seule application Web.) –

6

J'aime personnellement VisualVM. Il y a certainement des outils plus puissants, mais celui-ci a un bon ratio d'utilisabilité/puissance.

0

Si cela se produit après le redéploiement à chaud de votre application plusieurs fois, vous pouvez être affecté par this Grails bug. Le Tomcat FAQ a également plusieurs causes possibles pour les fuites de PermGen.

+0

Je pense en fait que c'est le problème racine (l'application fonctionne bien dans Jetty), mais même si je voudrais avoir une bonne ressource aller de l'avant pour faire ce genre de débogage. –

10

Avez-vous essayé

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

?

Avec l'augmentation des suspects habituels (-Xmx, -Xms, -XX:PermSize et -XX:MaxPermSize) ce permis de résoudre toutes les questions PermGen sur notre Tomcat production, qui avait eu lieu peu de temps après le déploiement de l'application. Jamais vu une autre exception OOM après cela. :-)

+1

des problèmes de performance liés à cette solution? Nous utilisons les plugins interrogeables, audibles et à quartz avec beaucoup de travaux récurrents et obtenir un OOM PermGen chaque semaine ... – hvgotcodes