运行Tomcat/Weblogic发生OutOfMemoryError: PermGen space错误

在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"
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值