线上OOM问题实战

当项目运行出现OutOfMemoryError: Java heap space时,通过`jmap`检查内存状态,发现最大对象为char。使用MAT工具进行heap_dump文件分析,定位到内存泄露源,发现HashMap未删除元素导致。解决后,优化代码避免循环内new对象,并注意单例模式的引用管理,保持冷静以高效排查问题。
摘要由CSDN通过智能技术生成

项目在测试环境运行一段两天后,会出现OutOfMemoryError: Java heap space 的错误,导致程序崩溃停止
遇到这种错误,往往很难知道是哪里出错,我去年有记录定位OOM的问题的文章,刚好重温一下:线上java.lang.OutOfMemoryError问题定位三板斧

先不着急重启,先看看内存情况:

  • top 查看java运行的pid
  • jmap -heap pid 查看内存占用情况,新生代和eden区确实是用了100%
  • jmap -histo:live pid| more 查看最大对象,发现是[C] 最大,也就是char

可是这样还是不知道哪里出了问题,因为程序用到字符的特别多,这里就需要更精细的定位工具,我用的是mat

  • 到官网下载最新的mat
  • 获取项目运行的heap_dump文件
  • 在本地导进heap_dump文件分析定位,查找内存泄露的地方

1.下载mat地址:https://www.eclipse.org/mat/downloads.php,下载完解压即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值