jmap分析内存泄漏OOM问题

一、Dump的基本概念

在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。

常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump是记录CPU信息的;

二、压测过程中内存问题分析常用步骤

1、使用 free -m 命令查看内存使用情况,判断内存使用占比是否过高

2、使用jstat -gc pid 命令查看GC回收情况,判断是否存在full GC频繁

3、使用 jmap -dump:live,format=b,file=xxxx.hprofile pid生成head dump文件

4、使用VisualVM或MAT工具分析dump文件,找到具体泄露的对象

三、jmap命令实战演示

1、free -m 查看内存使用情况,top命令查看进程PID:

在这里插入图片描述

2、使用jmap命令导出head dump文件:

jmap -dump:live,format=b,file=m.hprofile6534 6534
其中:m.hprofile6534是dump信息导出的文件名称,6534是进程号

在这里插入图片描述

3、使用JDK自带的VisualVM工具分析:

本地JDK安装目录》bin目录下找到jvisualvm.exe, 双加打开:

在这里插入图片描述

加载下载的head dump文件:

在这里插入图片描述

如果是有OOM的现象,这里会多一段显示,点击可以查看具体异常信息,帮助定位OOM的原因:

在这里插入图片描述

点击“类”可以查看对象类型,实例数占比,实例数个数、实例所占用内存大小从高到低排序,哪种类型的对象占用了内存最多一目了然:

在这里插入图片描述

如果某种类型的对象太多,那么有可能是引用它的那个类的对象太多,结合原代码,就可以初步定位内存泄漏的地方。

4、也可以使用工具:MAT ( Eclipse Memory Analyzer)做更深入详细的分析

下载MAT;
使用MAT打开head dump文件;
直接查看Report区域下Leak Suspects, MAT给出可能的内存泄露原因:

在这里插入图片描述

Action区域下Histogram可以查看分析哪些类型的对象占用的内存比较多(没有得到及时GC):

在这里插入图片描述

在对象上右键,菜单中可以选择show objects by class查看更详细的信息用于分析:

在这里插入图片描述

=================================================================================================
以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
在这里插入图片描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用jmap工具可以对Java应用程序进行内存分析,帮助排查OOM问题。以下是使用jmap工具进行OOM排查的步骤: 1. 确认OOM错误:通过查看应用程序的日志或系统日志,确认是否发生了OOM错误。 2. 获取Java进程ID:使用`jps`命令获取Java进程的ID,例如:`jps -l`。 3. 使用jmap生成堆转储文件:运行以下命令生成堆转储文件(heap dump file): ``` jmap -dump:format=b,file=heapdump.bin <pid> ``` 其中,`<pid>`是Java进程的ID。 4. 分析堆转储文件:使用MAT(Memory Analyzer Tool)等内存分析工具来打开生成的堆转储文件。MAT是一款常用的Java堆内存分析工具,可以下载安装并打开生成的堆转储文件。 5. 查找内存泄漏:在MAT中,可以通过执行一系列分析操作来查找可能的内存泄漏。其中一种常用的分析是通过查看堆转储文件中的对象引用关系来定位可能导致内存泄漏的对象。 6. 分析对象占用内存情况:在MAT中,可以查看对象占用内存的情况,包括对象数量、大小和引用关系等信息。这有助于确定哪些对象占用了大量内存,可能导致OOM。 7. 优化代码和资源释放:根据分析结果,优化代码以避免内存泄漏或者减少内存占用。确保及时释放不再需要的对象和资源,使用合适的数据结构等。 请注意,使用jmap生成堆转储文件会在运行期间暂停Java进程一段时间,请在生产环境中谨慎使用。此外,内存分析工具的使用需要一定的经验和技巧,对于复杂的问题,建议咨询专业的开发人员来进行排查和解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值