背景:
之前一直使用的JProfiler,本次测试,产生的hprof文件挺大,同事说使用jprofiler打不开,让用MAT。
方式1:使用MAT分析
1)jmap生成快照
jps
top
jstat -gcutil 24755 1000 5
netstat -atu|grep 20002
netstat -tunlp|grep 20002
tail -fn 100 ../logs/game.log
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=20002/ticp --permanent
firewall-cmd --zone=public --add-port=20002/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=20003/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
// 主要是这个
jmap -dump:live,format=b,file=java.hprof 24755
会生成如下快照:
2)Eclipse Memory Analyzer(MAT)
下载地址:
Eclipse Memory Analyzer | projects.eclipse.org
3)运行起来
可以修改堆内存
4)打开hprof文件
查找大对象
一级级展开,从而定位到哪个类出现了泄漏
方式2:使用JProfiler分析
step1:
右键-->Use Selected Objects
step2: 再弹框中选择下面这个查看外部引用(注意不是大对象!!!)
step3: 得到结果,可以看出来对象排序