java-lang-OutOfMemoryError-PermGen-space

在vps上部署多个应用时,报了 java.lang.OutOfMemoryError: PermGen space 错误,由于没有深入了解过jvm,只能在网上搜到了一些解决办法。

简述


java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决办法


这里以windows下tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。
1. MyEclipse/eclipse 中报 PermGen space。
window–>preferences–>Myclipse–>Servers–>Tomcat–>JDK,设置jdk参数。

-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m
**参数介绍:**
-Xms512m  #JVM初始分配的堆内存
-Xmx1024m  #JVM最大允许分配的堆内存,按需分配
-XX:PermSize=128M  #JVM初始分配的非堆内存
-XX:MaxPermSize=256M  #JVM最大允许分配的非堆内存,按需分配
  1. 手动设置MaxPermSize大小,如果是linux系统,修改TOMCAT_HOME/bin/catalina.sh,如果是windows系统,修改TOMCAT_HOME/bin/catalina.bat,在
echo "Using CATALINA_BASE: $CATALINA_BASE" 
上面加入以下行:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"
**建议:将相同的第三方jar文件移置到tomcat/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。**

3. 在windows中,如果以服务方式启动,这个一般在服务器上用的比较多,修改注册表的数据。
找到 HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Procrun 2.0/Tomcat7/Parameters/JavaHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Apache Software Foundation/Procrun 2.0/Tomcat7/Parameters/Java,修改JvmMs和JvmMx的值。或者直接修改Options的参数,加入 -Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m

之前还真不知道windows服务启动和startup.bat启动的区别。 windows服务器启动是在注册表中加载参数,startup.bat启动是在catalina.bat加载参数。

参考


http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html
http://www.cnblogs.com/xwdreamer/archive/2011/11/21/2296930.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值