2012-11-04 85 views
0

最近我開始在我的新碧玉報告應用程序在重負載下測試時發現PermGen空間問題。我使用groovy作爲報表的表達評估器,通過在我的jrxml文件中指定language="groovy。作爲groovy表達式,在運行時創建類,我懷疑這是導致permgen填充的根本原因。我嘗試設置jvm選項,如-XX:+ UseConcMarkSweepGC -XX:+ CMSClassUnloadingEnabled,但它並沒有幫助解決問題。即使在excpetion stacktrace(下面給出)中,類加載器也嘗試在失敗時將新構建的類加載到permgen中。有沒有人用jasper報告使用groovy時遇到過這個問題?我的報告會使用由jasper提供的AsynchronousFillHandle類提供的功能在單獨的線程中異步填充。這是否與類加載器有任何連接而不釋放加載的運行時類?任何建議將不勝感激。賈斯珀報告 - 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 Reports中遇到性能問題。也許你的解決方案會讓我感到... –

回答

2

作爲第一個賭注... 儘量加大燙髮根的大小,類似這樣的:

-XX:MaxPermSize=128m 

默認情況下,它的64米。

希望這會有幫助

+1

謝謝。這是臨時解決方案。它不會解決我的實際問題。如果應用程序繼續運行,它將再次溢出permgen。 – Bibin