(转)关于PermGenSpace内存溢出解决方案

本文详述了PermGenSpace内存溢出问题的解决过程,通过调整JVM参数及使用jconsole工具定位并修正错误配置,最终解决了Tomcat运行中出现的内存溢出异常。

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

(转)关于PermGenSpace内存溢出解决方案


启动tomcat没有问题,并且还能够访问,但是当你访问的页面越来越多的时候,会突然间蹦出一个PermGen space内存溢出的异常。其实这个问题看起来是很简单的,只要修改一下永久域的大小就可以了。于是我的同事就发给我一段修改永久域大小的代码:

JAVA_OPTS="-server-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m-XX:MaxPermSize=128m"(Xms堆内存初始值,Xmx堆内存最大值,为什么Xms和Xmx要设置一样大呢,因为如果你设置Xms初始值和Xms不一样,那么每次内存增大的时候都需要重新分配内存给堆,这样的每次增大都会相应的浪费时间。所以干脆设置Xms和Xmx一样。Xx:permsize是永久域的初始值,xx:maxpersize是最大分配的永久域空间,xx:maxnewsize是新域最大值)

把这段代码放到tomcat\bin目录下的catalina.bat文件(Linux修改catalina.sh)的第一行就可以了。弄好之后以为ok了。

还是报PermGen Space内存溢出,我在想是不是空间还不够大,于是把XX:PermSize设置512M,XX:MaxPermSize设置1024M。

满怀信心的一式结果崩溃了,还是报内存溢出,我还在想是不是内存空间分配的不够大啊,于是我又加大内存,结果一次次的失败。

于是我就在想到底是哪里需要分配这么大的内存,于是我换了一条思路,我来找哪里消耗的内存最大,于是找到一种工具就是jvm自带的,打开cmd然后输入jconsole,会弹出一个对话框,如图:
在这里插入图片描述
在这里插入图片描述

我选择远程进程,如何来设置这个远程进程连接呢:

打开Catalina.bat文件,然后找到rem -----Execute The Requested Command

在这个下面加入以下代码:

// An highlighted block
set JAVA_OPTS= %JAVA_OPTS%-Djava.rmi.server.hostname=xx.xxx.xx.xx(ip)

set JAVA_OPTS= %JAVA_OPTS%-Dcom.sun.management.jmxremote.port=xxxx(端口)

set JAVA_OPTS= %JAVA_OPTS%-Dcom.sun.management.jmxremote.ssl=false

set JAVA_OPTS= %JAVA_OPTS%-Dcom.sun.management.jmxremote.authenticate=false(如果为true就需要账号密码,这里为false简单点)

现在把ip和端口输入jconsole里面进行远程连接:

在这里插入图片描述

选择“内存”—“Ps Perm Gen”发现分配的内存还是只有80多M,我不是已经分配了2个G的内存给permGen space吗,为什么这里还是80多m呢。

在这里插入图片描述

猛然间想到是不是分配内存的代码错了

于是乎开始寻找新的内存分配代码这一次就有了下面这一段代码:

set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M-XX:MaxNewSize=256m -XX:MaxPermSize=256m

给永久域初始值分配128M,然后再用jconsole来查看,发现permGenspace不报内存溢出了。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值