2012-11-04 2 views
0

Récemment, j'ai commencé à obtenir un problème d'espace PermGen dans ma nouvelle application de rapport jasper lors de tests sous charge lourde. J'utilise groovy comme évaluateur d'expression pour les rapports, en spécifiant language="groovy dans mon fichier jrxml. En tant qu'expressions groovy, créez des classes à l'exécution, je suspecte que ceci soit la cause première du remplissage de permgen. J'ai essayé de configurer les options jvm comme -XX: + UseConcMarkSweepGC -XX: + CMSClassUnloadingEnabled, mais cela n'a pas aidé à résoudre le problème. Même dans stacktrace d'excpetion (donné ci-dessous) aussi, classloader essaye de charger la nouvelle classe construite dans permgen au moment de l'échec. Est-ce que quelqu'un a connu ce problème en utilisant groovy avec des rapports Jasper? Mes rapports sont remplis de manière asynchrone dans un fil séparé en utilisant les capacités fournies par la classe AsynchronousFillHandle fournie par jasper. Est-ce que cela a une connexion avec le classloader qui ne libère pas les classes d'exécution chargées? Toutes les suggestions seraient grandement appréciées.Rapports Jasper - OutOfMemoryError: espace PermGen

Exception in thread "Thread-563" java.lang.OutOfMemoryError: PermGen space 
Exception in thread "Thread-565"  at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.define(ClassLoaderForClassArtifacts.java:42) 
     at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:86) 
     at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:84) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.defineClassAndGetConstructor(ClassLoaderForClassArtifacts.java:84) 
     at org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePogoMethod(CallSiteGenerator.java:215) 
     at org.codehaus.groovy.reflection.CachedMethod.createPogoMetaMethodSite(CachedMethod.java:220) 
     at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createCachedMethodSite(PogoMetaMethodSite.java:206) 
     at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.createPogoMetaMethodSite(PogoMetaMethodSite.java:182) 
     at groovy.lang.MetaClassImpl.createPogoCallCurrentSite(MetaClassImpl.java:3034) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallCurrentSite(CallSiteArray.java:93) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 
     at Section_1_1348126593121_343308.evaluate(calculator_Section_1_1348126593121_343308:253) 
     at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190) 
     at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591) 
     at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559) 
     at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:884) 
     at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:421) 
     at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:406) 
     at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257) 
     at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:457) 
     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2037) 
     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:771) 
     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:301) 
     at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:148) 
     at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909) 
+0

Pouvez-vous vous augmenter la taille maximale perm gen? –

+0

Avez-vous trouvé une solution? Je rencontre des problèmes de performances dans les rapports Jasper. Peut-être que votre solution m'éclairerait ... –

Répondre

2

En tant que premier pari ... essayer d'augmenter la taille perm gen, comme ceci:

-XX:MaxPermSize=128m 

Par défaut son 64m.

Hope this helps

+1

Merci. C'est la solution provisoire. Cela ne résoudra pas mon problème réel. Si l'application continue à fonctionner, elle dépassera permgen à nouveau. – Bibin

Questions connexes