解决Tomcat 不定时报OutOfMemoryError: PermGen space

最近做了个小项目部署的时候,老提示OutOfMemoryError: PermGen space错误,在网络上搜索了相关的资料,但是按照做后还是存在这个问题。由于我是第一次碰到这个问题,花费了我2天时间,过程比较痛苦,结果还是比较圆满的。我将我的经历写下来,供我自己以后参考,也提供给大家分享。

在网络上关于OutOfMemoryError: PermGen space的解决办法很多了,但是有的办法都是互相转发,真假难辨。有的可能还产生误导。

我的环境是Myeclips 8.5、tomcat6.x,试过了很多办法后,比如:文档《Linux 和 Windows修改Java虚拟机内存大小》(http://duanfei.iteye.com/blog/1189541),中的办法,我都试过了,还是不行;当然还参考了很多其他资料,然后进一步研究JVM的优化等,我就是想知道我配置的内存参数应该够大了,为什么还是溢出,难道没有生效,那我就需要找到配置后系统认可的内存参数是多少,参考网络上的知识,启动了JDK自带的工具,在\jdk1.6.0_10\bin下面的jconsole.exe内存监控的工具,点击进入如下:选择PID为4472的这个进程,


点击进入如下界面,


选择内存页,并且选择图表中最后一个选项的“内存池“Perm Gen”,下面的详细信息显示的是:


这个地方的最大值是65536Kb,也就是64M,我于是就找到原因了,64M肯定会导致溢出,但是我配置了几百兆的内存空间就是不生效呢。注意,这个是我在myclipse中启动的tomcat看到的结果。

  接下来,我进入bin/catalina.bat文件中的“rem ----- Execute The Requested Command -”这个后面增加了下面的语句set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m-XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m,这个地方注意增加的位置是在rem ----- Execute The Requested Command –后面,最好set JAVA_OPTS=%JAVA_OPTS% 这个也要加上,这个网络上好多文档没有将这个位置交代清楚,或者说的不是这个地方,是不是其他地方也可以,我没有试。我手工启动tomcat,在cmd状态下输入:startup,然后看 jconsole.exe,明细Perm Gen的内存就是我配置的内存521M,是生效了的

但是我在myclipse中启动tomcat后,重新部署程序,错误依旧。原来文档《Linux 和 Windows修改Java虚拟机内存大小》(http://duanfei.iteye.com/blog/1189541)中提到

如果是通过Myeclipse启动Tomcat修改
Myeclipse配置选项  打开选项..输入tomcat关键字,然后点开Server下面的JDK就会出现配置区域OptionalJava VM arguments.
直接加入  -Xms128m-Xmx512m 

这个地方是有一个漏洞的,直接加入 “-Xms128m -Xmx512m ”,应该是“ -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m”,这个是对myclipse生效的。如果没有-XX:PermSize=256m-XX:MaxPermSize=512m,那么PermGen的内存始终是64M。修改后,重启tomcat,重新部署,内存不再溢出了。

我的机器上是:Servers/Tomcat/Tomcat 6.x/JDK 中的Optional Java VM arguments:


。找到了原因,解决也就自然很简单了。

注意这个地方Servers/Tomcat/Tomcat 6.x 这个地方还有一个参数:Optional program arguments,这个感觉作用不大,我也是修改后没有什么效果,我以为修改这个地方就可以了,导致我走了弯路。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值