運行我們的web應用程序遇到複雜的情況的OutOfMemoryError:PermGen的空間 - 同春碧玉報告的Tomcat
它是由STS/Tomcat 7
開發的Spring應用程序。應用程序與Jasper report 4.6.0
集成後,它總是拋出`OutOfMemoryError:PermGen空間。那麼讓它工作的唯一方法就是重新啓動應用程序。但過了一段時間它又發生了。 這裏是登錄異常之前:
Oct 17, 2012 3:42:27 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Oct 17, 2012 3:42:30 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
這裏是例外中的一個部分,在那裏我發現了一些關於Jasper
:
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:442)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
at org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:240)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:578)
at org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:49)
at org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:655)
這裏有幾個發現時的情況發生:
該問題可能發生在沒有任何Jasper Report組件的頁面上。看起來Jasper Report bean在
a request is processed by the back end and responded to the front end
的時候總是試圖找到一個標籤庫lib。通常從日誌文件我可以看到上述異常不會拋出,直到所有後端操作(JPA管理)完成當在調試模式下運行log4J時,我看到大量的信息顯示類似解析/渲染所有組件碧玉模板(文本框,筆,中...),還有從巨大的日誌一小截:
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- startElement(http://jasperreports.sourceforge.net/jasperreports,textElement,textElement) 2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- Pushing body text '' 2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- New match='jasperReport/summary/band/textField/textElement' 2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- Fire begin() for FactoryCreateRule[className=net.sf.jasperreports.engine.xml.JRTextElementFactory, attributeName=null, creat[email protected]12dc6007] 2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- [FactoryCreateRule]{jasperReport/summary/band/textField/textElement} New net.sf.jasperreports.engine.design.JRDesignTextField 2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- ignorableWhitespace()
然而,當到不網頁請求包含任何碧玉組件生成此日誌。
我做了一些研究,但仍然找不到解決這個問題的方法。
的第一個問題是,即使存在時,它甚至沒有與當前服務自動連接(這意味着當前頁面沒有任何碧玉分量)爲什麼它總是在運行應用程序
jasperreport bean
。有沒有解決方案/這種情況的答案?同樣來自例外消息 至少有一個JAR針對TLD進行掃描,但尚未包含任何TLD。 (JDTCompiler.java:442) 在org.apache.jasper.compiler.JDTCompiler.generateClass
應該來自Tomcat和
Tomcat never contains any JSTL jar
,那麼我想也不能找到匹配的TLD解析碧玉報告,因此做一個完整的掃描所有的罐子。如果是這樣,那麼來自org.apache.commons.digester.Digester
的大量調試日誌怎麼會在解析碧玉模板時看起來很忙呢?
一般情況下,讓這個線程只是試圖找出一個解決萬阿英,蔣達清,也找到一個答案,爲什麼碧玉是如此活躍的地方並不需要它,以及我們如何能夠讓tomcat正確地解析了模板?
道歉,如果太詳細,並感謝任何提示。
那麼,你有沒有嘗試增加PermGen的大小?這不像其他方式。 –
@Frank Pavageau是我試過了,把它放到512M,但仍然得到同樣的問題......它在'catalina.sh'和JAVA_OPTS =「...- XX:MaxPermSize = 512m ...」? – Dreamer
@FrankPavageau看起來jasper報告在某些配置中存在這些問題,因此在jasper報告中對根本原因進行故障排除可能是非常可行的。 – eis