-
急求解答java.lang.OutOfMemoryError: PermGen space5
公司的网站经常会死掉,每次重启tomcat就会好用catalina错误日志如下:
2013-4-19 3:27:41 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class com.sun.faces.config.ConfigureListener
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at com.sun.faces.config.ConfigureListener.<clinit>(ConfigureListener.java:209)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3787)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3099)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:619)
catalina.out错误日志:
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor3" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor11" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor5" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor12" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor2" Exception in thread "TP-Processor8" java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor9" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor16" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor15" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor14" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor13" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor20" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor19" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor18" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor17" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor24" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor23" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor22" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor21" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor28" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor27" java.lang.OutOfMemoryError: PermGen space
Exception in thread "TP-Processor26" java.lang.OutOfMemoryError: PermGen space2013年4月19日 09:33
9个答案 按时间排序 按投票排序
-
先解释下什么是PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
注意红色部分,如果加载的class太多就可能产生这个问题。
我也曾经遇到过这种问题,并且在博客中写过:
异常:java.lang.OutOfMemoryError: PermGen space
http://yunzhu.iteye.com/blog/1035741
我遇到的这个问题,引起的原因是自定义ClassLoader重复加载了很多次相同的jar,所以只要避免重复加载同样的jar就可以解决问题了。
所以可能的原因有:
加载了太多的class
加载了太多的jar
重复加载了太多的jar
具体的解决方法:
1. 手动设置MaxPermSize的大小
修改 TOMCAT_HOME/bin/catalina.bat(Linux上为catalina.sh)文件,
在echo "using CATALINA_BASE:$CATALINA_BASE"上面加入这一行内容:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128m -XX:MaxPermSize=512m
catalina.sh修改如下:JAVA_OPTS="$JAVA_OPTS" -server -XX:PermSize=128m -XX:MaxSize=512m
2.修改 TOMCAT_HOME/bin/catalina.bat文件的内容:在 %_EXECJAVA% %JAVA_OPTS% 后面添加:
-Xms=256m -Xmx512m
注意哦,前后有空格的
例如:%_EXECJAVA% %JAVA_OPTS% -Xms=256m -Xmx512m(空格),后面的内容不变
3. 可以考虑将相同的第三方jar文件拷贝到tomcat/shared/lib 目录下,这样可以减少jar文件重复占用内存的。2013年4月19日 09:46
-
具体的解决方法:
1. 手动设置MaxPermSize的大小
修改 TOMCAT_HOME/bin/catalina.bat(Linux上为catalina.sh)文件,
在echo "using CATALINA_BASE:$CATALINA_BASE"上面加入这一行内容:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128m -XX:MaxPermSize=512m
这个方式已经试过,是可以的。刚解决了我的问题。2014年5月24日 12:58
-
所有这些问题都应该是程序本身的问题,调整参数只是一个缓兵之策!
建议做一下压力测试,然后使用内存查看工具分析一下到底哪些class加载得太多了。在windos平台上我用jprofile比较多,图形化的界面,对分析问题很有帮助;2013年4月28日 17:35
-
前段时间我也出现了这样问题,最后检查是因为在server.xml中用了<Context path="" docBase="myproject" debug="0" reloadable="false" />指定了路径,实际上把myproject内容放到ROOT下面是一样作用...
可能跟tomcat版本有关系..不知道你是不是也是因为这样原因..2013年4月19日 17:25
-
我在用myeclipse的时候,也出现了这个问题
修改如下:
1. window-->Preferences...-->MyEclipse-->Application Servers-->Tomcat,
2. 选中你安装的tomcat版本,选中下面的JDK,在右边的
Optional Java VM arguments 文本框中输入:
-Xmx256M -Xms256M -XX:MaxPermSize=256m
这些值可以适当调整2013年4月19日 14:25
-
即hotspot的永久代 内存不足
1、调大内存 看看是不是还有问题
1、修改PermSize 看看还报错不 如果不报错说明perm size太小
如果是java 可以写个脚本 使用如我自己的
export JAVA_OPTS="$JAVA_OPTS -Xms50m -Xmx400m -XX:PermSize=128M -XX:MaxPermSize=200M"
/usr/program/tomcat-ssonline/bin/startup.sh
http://blog.csdn.net/zenwong/article/details/2409775
2、如果还是有问题
使用 jmap -permstat 获取永久代 来分析哪些数据造成的影响
http://stackoverflow.com/questions/2051734/why-is-permgen-space-growing2013年4月19日 11:13
-
引用经常会死掉,每次重启tomcat就会好用引用严重: Error configuring application listener of class com.sun.faces.config.ConfigureListener
不知道这个“经常”是多久,看上去是JSF相关的地方有内存泄漏。
不大靠谱的办法有
1.tomcat的版本
2.JSF的实现的版本。
3.JVM的版本。
检查上述东西的版本,看看官方是否有bug报告和补丁。
最后,检查程序的代码,看看有没有内存泄漏。用些工具监视运行时内存会好些。
最后的最后,定时重启Tomcat吧!
最后的最后的最后,定时重启服务器吧!2013年4月19日 10:46
-
方法区或者常量池溢出了,用jdk内部的C:\Program Files\Java\jdk1.6.0_11\bin\jconsole.exe,查看一下你的jdk运行时状态,把 -XX:PermSize,-XXMaxPermSize 调大一些。
2013年4月19日 09:47
相关推荐
java.lang.OutOfMemoryError: PermGen space 解决方案
在Java应用程序运行过程中,"java.lang.OutOfMemoryError: PermGen space"错误是常见的一个问题,尤其是在使用Tomcat这样的Java应用服务器时。这个错误表明应用程序在 PermGen 区域(Permanent Generation)耗尽了...
### Java.lang.OutOfMemoryError: PermGen space 及其解决方法 #### 一、PermGen space 概述 在Java虚拟机(JVM)中,PermGen space(永久代)是用于存储类的信息、常量、静态变量等数据的区域。在Java 8之前,Perm...
Eclipse 中通过 Tomcat 运行 J2EE 项目 java.lang.OutOfMemoryError PermGen space 的解决方案 在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于...
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
在Java编程中,我们常常会遇到一个让人头疼的问题,那就是“java.lang.OutOfMemoryError: PermGen space”错误。这个错误提示表明,应用程序在运行过程中,内存的永久代(Permanent Generation)空间不足,导致了...
本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
当应用程序加载大量类或者使用了大量的静态变量和常量时,PermGen space可能会耗尽,从而引发`java.lang.OutOfMemoryError: PermGen space`错误。对于频繁部署或重载JSP的Web应用,如Tomcat,这个问题尤为常见。 ...
在Java应用程序运行过程中,可能会遇到“OutOfMemoryError: PermGen space”的错误提示。这种错误通常发生在永久代(PermGen space)内存不足的情况下,永久代主要用于存储类的信息、常量、静态变量以及方法信息等。...
### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...
4. **调整PermGen空间**:在Java 8之前, PermGen 区域用于存储类的元数据,如果这个区域耗尽,会出现`java.lang.OutOfMemoryError: PermGen space`错误。在Java 8中,这部分被MetaSpace取代,可通过`-XX:...
在Tomcat中java.lang.OutOfMemoryError: PermGen space异常处理: 1. PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的。 2. Class在被Loader...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 #### 一、问题概述 在进行Java项目编译的过程中,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这种异常。这类异常通常表明Java虚拟机...
在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个错误通常发生在创建大量对象或者单个对象占用过多内存时。 一、问题描述与...
5. **增大PermGen或Metaspace大小**:如果你看到 `OutOfMemoryError: PermGen space` 或 `Metaspace`,这是方法区溢出,可以通过 `-XX:MaxPermSize` (对于老版本JVM) 或 `-XX:MaxMetaspaceSize` (对于Java 8及以后...
java.lang.OutOfMemoryError: Java heap space 解决方法