2012-11-04 5 views
0

Недавно я начал получать пространство пространства PermGen в своем новом приложении отчета о яшме при тестировании под большой нагрузкой. Я использую groovy как средство оценки выражений для отчетов, указав language="groovy в моем jrxml-файле. Как выраженные выражения, создавайте классы во время выполнения, я подозреваю, что это является основной причиной заполнения пермг. Я попытался настроить параметры jvm, такие как -XX: + UseConcMarkSweepGC -XX: + CMSClassUnloadingEnabled, но это не помогло в решении проблемы. Даже в excection stacktrace (см. Ниже) classloader пытается загрузить вновь построенный класс в permgen во время сбоя. Кто-нибудь испытал эту проблему, используя groovy с отчетами о яшме? Мои отчеты заполняются асинхронно в отдельном потоке, используя возможности, предоставляемые классом AsynchronousFillHandle, предоставляемые jasper. Имеет ли это какое-либо отношение к загрузчику классов, не выпуская загруженные классы времени выполнения? Любые предложения будут ценны.Отчеты Jasper - OutOfMemoryError: пространство 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

Можете ли вы увеличить максимальный размер гена? –

+0

Вы нашли решение? Я испытываю проблемы с производительностью в отчетах Jasper. Может быть, ваше решение просветит меня ... –

ответ

2

В первую ставку ... Попробуйте увеличить завивку ген размер, как это:

-XX:MaxPermSize=128m 

По умолчанию его 64м.

Надеюсь, это поможет

+1

Спасибо. Это временное решение. Это не решит мою актуальную проблему. Если приложение продолжит работу, оно снова переполнит permgen. – Bibin

Смежные вопросы