java.lang.OutOfMemoryError: PermGen space

本文探讨了在Tomcat服务器中遇到的java.lang.OutOfMemoryError: PermGen space错误原因及解决方案。通过深入分析,发现该问题是由于反复部署应用程序导致永久代内存回收困难所致。文章提供了两种设置MaxPermSize的方法,一种是在启动脚本中配置,另一种是通过修改注册表实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司的网站在manager下重启几次后,老是出现java.lang.OutOfMemoryError: PermGen space,这个错误,但是在网上查了很多都说是需要增大内存.说增大内存就能解决完事了,

但是这个不是太让人信服,我怕我增大之后,还会出现,到时候丢人就丢大了!于是我自己在本机上测试,并且通过,jconsole监控我的jvm,终于找到了点有用的东西! 

 

这个是写的错误报告:

内 存中分 堆内存 和 非堆内存 ,堆内存只要存储的是变量 数据之内的东西, java 的GC会在内存还剩10%左右的时候进行清理, 但是当内存中加 载的数据量过于庞大,如一次从数据库取出过多数据 这个地方会报   OutOfMemoryError: Heap space  错误

在 非堆内存(permanent)中,主要存储类的定义等不怎么变的数据。反复部署应用程序很多遍后,tomcat往往难以处理复杂的类依赖关系, 对 permanent区域的内存回收更是很困难的,最后导致越用越多,几遍之后这个区域就不够用了,而这个区域又是不能增长,并且不会GC...  之后便 会报java.lang.OutOfMemoryError: PermGen space

 

省了些东西(图片你们可以在 java的bin目录下使用jconcole 检测,一样的)

 

我认为原因是:反复部署应用程序很多遍后,tomcat往往难以处理复杂的类依赖关系, 对permanent区域的内存回收更是很困难的,才会报这个错的,

我希望每次的部署完成,能进行tomcat重启,或者加大PermGen space 这块内存,

 

 解决方法: 手动设置MaxPermSize大小
   a.如果tomcat是以bat方式启动的,则如下设置:
   修改TOMCAT_HOME/bin/catalina.sh
   在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
   JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
   b.如果tomcat是注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值。
    打开注册表,找到目录HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation \Procrun 2.0\htfty\Parameters\Java,其中目录地址中红色标注的(如htfty)需要根据不同情况作修改,为 tomcat服务注册成 windows服务的名称。 可以看到JvmMs和JvmMx项,其中JvmMs设置最小的内存使用参数,JvmMx设置最大的 内存使用参数。设置好JvmMs和JvmMx项的值,重 启tomcat服务器即可生效。
   建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

转载于:https://www.cnblogs.com/qiunet/p/3296496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值