您的位置:首页 > 编程语言 > Java开发

JBoss下问题- java.lang.OutOfMemoryError: PermGen space

2013-07-15 13:00 429 查看
最近出现一个问题,在JBoss中部署完项目并运行时,请求网页会报 java.lang.OutOfMemoryError: PermGen space

从网上搜资料后才知道,是由于PermGen space内存不足引起的。

分析原因:

1、 java.lang.OutOfMemoryError: PermGen space 从字面上也能看出是由于 PermGen space 的内存空间不足,而导致的内存溢出错误。

2、PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会Load很多Class的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre
compile的时候。

解决方法:

如果项目中引用了很多的 jar 包,那么这些 jar 包中的 Class 信息会被 JBoss 的 Class Loader 加载到 PermGen space 区域,而在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的。但可以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。

CentOS 6.3下的解决步骤(其他系统类似):

#cd /usr/local/jboss/bin
#vim run.conf
修改run.conf中的JAVA_OPTS,增加-XX:PermSize=256m -XX:MaxPermSize=512m 两项内容,结果如下

JAVA_OPTS="-Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: