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

最近出现一个问题,在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"

你可能感兴趣的:(JBoss下问题- java.lang.OutOfMemoryError: PermGen space)