Heapdump和GC问题分析SOP

发布时间 2023-07-03 18:02:13作者: 涅槃的凤凰

1.登录机器

2.dump堆

# 查看进程ID
ps aux | grep java
# dump存活对象(format=b或者json,存储为二进制或者Json文件)
jmap -dump:live,format=b,file=livedump.hprof <pid>
# 所有对象dump
jmap -dump:format=b,file=alldump.hprof <pid>

3.下载dump文件

在下载之前,先压缩文件

# 压缩命令
tar zcvf <压缩后的文件名>.tar <被压缩的文件>

# 示例
tar zcvf gclog.tar a_gc_file.log

4.使用MAT工具来分析

安装最近版本的MAT需要jdk11以及以上的版本。使用Eclipse MAT来分析,查看哪个对象最大以及引用从哪里来(point in)

光标放在最大的对象上,就可以看到这个对象是哪个对象了。
Shallow size:该对象本身的大小,不包括被这个对象引用的其他对象。
Retained size:该对象本身的大小,以及被这个对象引用的其他对象。

查看最大的对象是被哪个对象引用的,就可以知道是哪里的代码导致了内存泄露。

5.问题处理

  • 修改代码,解决GC问题
  • 调整GC参数,进行GC优化