内存溢出java.lang.OutOfMemoryError: PermGen space

最近tomcat老是崩掉,

查看日志文件发现错误原因为

java.lang.OutOfMemoryError: PermGen space ;

经查阅相关资料,PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出说说为什么会内存益出: 
1)这一部分用于存放ClassMeta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放InstanceHeap区域不同。 
2) GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APPLOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

起初,我们想用jdk自带工具jstatjconsole检测jvm的内存使用情况,但是发现jps命令 查不出来pid,而ps -ef|grep java 查出的pid用于 jstat会出现pid not found的情况。

参考了此篇博文后发现

http://blog.csdn.net/wan_xie2009/article/details/7552891 

原来是jdk1.6.0.23/24版本兼容性问题  ,恰巧我们使用的是jdk1.6.0.0.24,需要修改配置文件

 

While it's true that 6u23/24 introduce this issue, it's not a bug in jps. Rather a change in behavior of the VM itself.

 On GNU/Linux Jps and the likes seem to only look at /tmp but not necessarily your CATALINA_TMPDIR. If set or

 not, try to export CATALINA_TMPDIR=/tmp which translates to "-Djava.io.tmpdir=/tmp" and after restarting the Tomcat process you should see Tomcat's data

 as "/tmp/hsperfdata_/" and Jps will most likely work again as well.  

 

于是修改tomcat的catalina.sh文件 找到CATALINA_TMPDIR的说明和配置的地方。#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory the JVM should use 

(java.io.tmpdir).  Defaults to  $CATALINA_BASE/temp.
可以看到他的默认路径是$CATALINA_BASE/temp 

将默认配置路径注释掉,增加CATALINA_TMPDIR=/tmp这句。

if [ -z "$CATALINA_TMPDIR" ] ; then
  # Define the java.io.tmpdir to use for Catalina
  # CATALINA_TMPDIR="$CATALINA_BASE"/temp
 CATALINA_TMPDIR=/tmp
fi 

 重启tomcat后可以使用jconsole监测了。

 

 

经过监测发现permgen最大值(-XXMaxPermSize)为256M ,之前配置的1024M-XXMaxPermSize)未生效。经检查是由于同时开启了3tomcat而未分别指定CATALINA_BASE所导致。然后在/etc/profile文件中修改如下

 

CATALINA_BASE=/opt/tomcat_portal_80

CATALINA_HOME=/opt/tomcat_portal_80

export CATALINA_BASE CATALINA_HOME

 

CATALINA_2_BASE=/opt/tomcat_uia_s

CATALINA_2_HOME=/opt/tomcat_uia_s

export CATALINA_2_BASE CATALINA_2_HOME

 

CATALINA_3_BASE=/opt/tomcat_freshmanportal_8888

CATALINA_3_HOME=/opt/tomcat_freshmanportal_8888

export CATALINA_3_BASE CATALINA_3_HOME

 

TOMCAT_HOME=/opt/tomcat_portal_80

export TOMCAT_HOME

 

TOMCAT_2_HOME=/opt/tomcat_uia_s

export TOMCAT_2_HOME

 

TOMCAT_3_HOME=/opt/tomcat_freshmanportal_8888

export TOMCAT_3_HOME

 

然后在catania.sh中设置

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=1024M -XX:MaxNewSize=256m -XX:MaxPermSize=1024m" 

然后再次用jconsole监测

发现-XX:MaxPermSize=1024m已生效。

<!--EndFragment--><!--EndFragment-->

<!--EndFragment-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值