【JVM 内存不足问题排查小记】

点击某个API时,JVM直接重启了

在开发环境和本地这个API都没问题。但是在测试环境,一点击某个API,整个服务直接重启。

JVM日志

并没有在测试环境中找到jvm日志,应该是没配置打印日志。

复制测试环境的VM 配置到本地,浮现bug

复制了JVM的VM配置到本地的idea,重启本地服务。打开JConsole监控JVM内存使用情况。

JConsole中gc异常

发现点击API时瞬时内存占用异常高(有大对象,集合)。gc数量增加2次,但是并没有效果。伊甸园区内存,总内存占用几乎不变。
这里推测是还在使用过程中,不符和gc回收对象的条件。
也就是这个API占用内存本身就多。

解决

这里分批次进行处理。每个批次处理完后,手动置空大对象。

结果

再次重启后,发现该API运行中还是存在2次gc,但是gc效果明显。gc后内存有效释放,不在堆溢出重启服务。

学习JVM参数配置

1.拿到JVM的启动参数可以从容器配置的yml中拿取;

也可以使用命令:

ps -ef|grep java 
2. 拿到JVM启动参数后可以向chatgpt提问,参考参数设置是否合理,以下是gpt的建议:
在这些参数中,大部分的设定都是合理的。不过有一个参数可能需要调整,那就是-XX:ParallelGCThreads=4,因为你的机器有12核,所以这个参数可以设置为12,这样可以充分利用CPU资源进行垃圾收集。另外,元空间的大小也可能需要根据实际情况进行调整。如果你的应用有大量的类或者大量的动态生成类,可能需要增大元空间的大小。

参考文章:
https://zhuanlan.zhihu.com/p/679783776

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值