OutOfMemoryError: PermGen Space - отчет Jasper с Spring, работающим на Tomcat

Наше веб-приложение столкнулось со сложной ситуацией

Это приложение Spring, разработанное STS /Tomcat 7, После того, как приложение было интегрировано сJasper report 4.6.0, он всегда выбрасывает `OutOfMemoryError: PermGen Space. Тогда единственный способ заставить его работать - перезапустить приложение. Но через некоторое время это повторилось. Вот журнал перед исключением:

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 все время пытается найти тег liba request is processed by the back end and responded to the front end, Обычно из файла журнала, который я вижу выше, исключение не будет выброшено, пока не завершены все операции с сервером (управление JPA)

Когда я запускаю log4J в режиме отладки, я вижу кучу информации, показывающей что-то вроде разбора / рендеринга всех компонентов из шаблона Jasper (textfields, pen, box ...), есть небольшой отрыв от огромного журнала:

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, creationFactory=net.sf.jasperreports.engine.xml.JRTextElementFactory@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()

Тем не менее, этот журнал генерируется при запросе к странице, которая не содержит ни одного компонента Jasper.

Я провел некоторое исследование, но все еще не могу найти решение этой проблемы.

Первый вопрос, даже естьjasperreport bean в приложении, почему он всегда работает, когда он даже не подключен автоматически с текущей службой (то есть текущая страница не имеет компонента jasper). Есть ли решение / ответ на эту ситуацию?

Также из сообщения об исключении По крайней мере один JAR был отсканирован на предмет TLD, но не содержал TLD. в org.apache.jasper.compiler.JDTCompiler.generateClass (JDTCompiler.java:442)

должен поступить от Tomcat, иTomcat never contains any JSTL jar, тогда я предполагаю, что он не может найти соответствующий TLD для разбора отчета jasper, поэтому делаю полное сканирование всех jar-файлов. Если так, то как же получается огромное количество отладочных журналов отorg.apache.commons.digester.Digester на самом деле, кажется, занят анализом шаблона яшмы?

В общем, создать этот поток - просто попытаться найти решение проблемы, а также найти ответ на вопрос, почему Jasper настолько активен в местах, где это не требуется, и как мы можем позволить tomcat правильно проанализировать шаблоны?

Прошу прощения, если слишком многословен, и спасибо за любые подсказки.

Ответы на вопрос(5)

Ваш ответ на вопрос