对于想了解OutOfMemoryError:PermGen空间—在Tomcat上运行Spring的Jasper报告的读者,本文将提供新的信息,我们将详细介绍tomcat报错permgenspace,并
对于想了解OutOfMemoryError:PermGen空间—在Tomcat上运行Spring的Jasper报告的读者,本文将提供新的信息,我们将详细介绍tomcat报错permgen space,并且为您提供关于eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space、Eclipse运行Tomcat时提示如下:OutOfMemoryError PermGen space、idea java.lang.OutOfMemoryError: PermGen space、IDEA 控制台问题:java lang OutOfMemoryError:PermGen space的有价值信息。
本文目录一览:- OutOfMemoryError:PermGen空间—在Tomcat上运行Spring的Jasper报告(tomcat报错permgen space)
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- Eclipse运行Tomcat时提示如下:OutOfMemoryError PermGen space
- idea java.lang.OutOfMemoryError: PermGen space
- IDEA 控制台问题:java lang OutOfMemoryError:PermGen space
OutOfMemoryError:PermGen空间—在Tomcat上运行Spring的Jasper报告(tomcat报错permgen space)
我们的Web应用程序遇到了复杂的情况
它是STS /开发的Spring应用程序Tomcat 7
。将应用程序与集成后Jasper report4.6.0
,它总是抛出`OutOfMemoryError:PermGen
Space。然后,使其正常工作的唯一方法是重新启动应用程序。但是过了一会儿又发生了。这是例外之前的日志:
Oct 17, 2012 3:42:27 PM org.apache.jasper.compiler.TldLocationsCache tldScanJarINFO: 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 invokeSEVERE: 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.jaspercompiler.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一直在尝试查找标记lib
a request is processed by the back end and responded to the front end
。通常,从日志文件中可以看到,在所有后端操作(JPA管理)完成之前,不会引发上述异常在调试模式下运行log4J时,我看到大量信息,例如从Jasper模板(文本字段,钢笔,盒子…)解析/渲染所有组件,从巨大的日志中可以看到一个小片段:
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
应用程序中甚至存在一个问题,即使它没有与当前服务自动连线(为什么当前页面没有任何碧玉组件),为什么它总是运行。有这种情况的解决方案/答案吗?同样从异常消息中,至少扫描了一个JAR来查找TLD,但其中不包含TLD。在org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:442)
应该来自Tomcat,然后Tomcat never contains any JSTLjar
,我假设它找不到匹配的TLD来解析jasper报告,因此对所有jar进行完整扫描。如果是这样,那么为什么org.apache.commons.digester.Digester
在解析jasper模板时似乎却忙于大量调试日志呢?
通常,使该线程只是试图找出解决方案的方法,并找到一个答案,为什么Jasper如此活跃在不需要它的地方,以及如何让tomcat正确解析模板?
如果太冗长,表示歉意,并感谢您提供任何提示。
答案1
小编典典谢谢大家提供有关此问题的解决方案,我已经根据我的具体情况确定了问题,以下是解决方案:
使用.jasper而不是.jrxml作为模板!
我们知道这.jasper
是一个已编译的模板以及.jrxml
该模板的ASCII源代码,因此,如果在当前spring应用程序中使用原始源代码文件(jrxml)作为模板,则至少spring框架工作必须编译该源代码文件。这是Spring框架的效率问题,因为它是处理编译的jasper
bean,并且不能保证编译仅执行一次并且仅在应用程序启动时发生。
简而言之,将所有模板替换为.jasper文件后,日志大小已显着减小,并且不再出现内存不足的问题。我猜想Spring容器可能会在运行时消耗大量资源来将jrxml编译为jasper。因此,Jasper或Spring应该可以对它进行一些改进。
eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
发布工程后,启动tomcat出现如下内存溢出错误:
java.lang.OutOfMemoryError: PermGen space
。。。
java.lang.OutOfMemoryError: Java heap space .
。。。
解决方案:
1.进入eclipse界面中的servers选项卡,右击 工程配置的tomcat项,单击“Open”.(如图):
2.单击“Open launch configuration”
3.在弹出的窗口界面中,VM arguments 框中的结尾加入:
-Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
点击“Apply”.启动后错误解决。
Eclipse运行Tomcat时提示如下:OutOfMemoryError PermGen space
关于Eclipse运行Tomcat提示的错误
方案一、
给tomcat指定的jdk加大启动的内存参数
Window-Server-tomcat-edit-jre-edit-Default VM arguments
-Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=1024m
方案二、
D:\HelloJoker1990\apache-tomcat-7.0.59\bin 目录下的catalina.bat编辑
在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行添加
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=1024M -XX:MaxPermSize=2048m
|
java堆空间的溢出,即Old区域剩余的内存,无法满足将要晋升到Old区域的对象大小。
如果你用win
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx256m
如果你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命令:
JAVA_OPTS="-Xms32m -Xmx256m"
|
idea java.lang.OutOfMemoryError: PermGen space
解决方案,如下
-Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
1.如果是web项目,修改 tomcat 内存
2.如果普通程序则是修改程序vm
IDEA 控制台问题:java lang OutOfMemoryError:PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
OutOfMemoryError: PermGen space从表面上看就是内存溢出,解决方法也一定是加大内存。
为什么会内存溢出:
这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,
它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清
所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误
这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法1:
手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:
将相同的第三方jar文件移置到tomcat/shared/lib目录下,
这样可以达到减少jar 文档重复占用内存的目的。
解决方法2:
Tomcat配置中的 VM options选项,添加:
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
-Xms,表示程序启动时,JVM 堆的初始化最小尺寸参数;
-Xmx,表示程序启动时,JVM 堆的初始化最大尺寸参数;
-XX:PermSize,表示程序启动时,JVM 方法区的初始化最小尺寸参数;
-XX:MaxPermSize,表示程序启动时,JVM 方法区的初始化最大尺寸参数。
今天关于OutOfMemoryError:PermGen空间—在Tomcat上运行Spring的Jasper报告和tomcat报错permgen space的介绍到此结束,谢谢您的阅读,有关eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space、Eclipse运行Tomcat时提示如下:OutOfMemoryError PermGen space、idea java.lang.OutOfMemoryError: PermGen space、IDEA 控制台问题:java lang OutOfMemoryError:PermGen space等更多相关知识的信息可以在本站进行查询。
本文标签: