在Eclipse中运行Tomcat发生OutOfMemoryError: PermGen space错误
现象:
Exception in thread "Keep-Alive-Timer" java.lang.OutOfMemoryError: PermGen space
at java.util.AbstractList.subList(AbstractList.java:484)
at java.util.Vector.subList(Vector.java:1034)
at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:204)
at java.lang.Thread.run(Thread.java:722)
说明:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
原因:
1、加载class过多
2、第三方jar大小超过jvm默认的大小(4M)
解决:
1、Run->Debug Configuration->MyEclipse Server->Tomcat 6.x->Arguments
在VM arguments最后加上
-Xms1024m -Xmx2024m -XX:MaxPermSize=256m
在利用Weblogic也发生了类似的现象:
java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
Truncated. see log file for complete stacktrace>
在setDomainEnv.sh里把MEM_ARGS="${MEM_ARGS} ${MEM_DEV_ARGS} ${MEM_MAX_PERM_SIZE}" 更改为MEM_ARGS="-Xms1024m -Xmx2024m -XX:MaxPermSize=256m"
来自网路的补充:
项目大了以后开发环境频繁deploy会导致weblogic报permGen 错误,查了一下,暂时解决的办法是:
在weblogic/common/bin/commEnv.sh中配置
MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"
-Xms:内存初始值
-Xmx:内存最大值(不要超过内存的80%)
MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。
可调整为:
MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
-XX:MaxPermSize改为256或512
现象:
Exception in thread "Keep-Alive-Timer" java.lang.OutOfMemoryError: PermGen space
at java.util.AbstractList.subList(AbstractList.java:484)
at java.util.Vector.subList(Vector.java:1034)
at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:204)
at java.lang.Thread.run(Thread.java:722)
说明:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
原因:
1、加载class过多
2、第三方jar大小超过jvm默认的大小(4M)
解决:
1、Run->Debug Configuration->MyEclipse Server->Tomcat 6.x->Arguments
在VM arguments最后加上
-Xms1024m -Xmx2024m -XX:MaxPermSize=256m
在利用Weblogic也发生了类似的现象:
java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
Truncated. see log file for complete stacktrace>
在setDomainEnv.sh里把MEM_ARGS="${MEM_ARGS} ${MEM_DEV_ARGS} ${MEM_MAX_PERM_SIZE}" 更改为MEM_ARGS="-Xms1024m -Xmx2024m -XX:MaxPermSize=256m"
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
# MEM_ARGS="${MEM_ARGS} ${MEM_DEV_ARGS} ${MEM_MAX_PERM_SIZE}"
MEM_ARGS="-Xms1024m -Xmx2024m -XX:MaxPermSize=256m"
export MEM_ARGS
fi
如果出现以下错误:
Could not reserve enough space for object heap
说明设置的过大
来自网路的补充:
项目大了以后开发环境频繁deploy会导致weblogic报permGen 错误,查了一下,暂时解决的办法是:
在weblogic/common/bin/commEnv.sh中配置
MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"
-Xms:内存初始值
-Xmx:内存最大值(不要超过内存的80%)
MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。
可调整为:
MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
-XX:MaxPermSize改为256或512