剖析堆内存
1.dump堆内存命令:
jmap -dump:format=b,file=<dumpfile.hprof> <pid>
无奈及时dump,应用上面命令开启主动dump
-XX:+HeapDumpOnOutOfMemoryError
2.应用MAT加载hprof文件
线上CPU打到100%
先进服务器,用top -c 命令找出以后过程的运行列表
按一下 P 能够依照CPU使用率进行排序
显示Java过程 PID 为 2609 的java过程耗费最高
而后咱们须要依据PID 查出CPU外面耗费最高的过程
应用命令 top -Hp 2609 找出这个过程上面的线程,持续按P排序
能够看到 2854 CPU耗费最高
2854是十进制的,咱们须要转换为十六进制,转换后果:b26
接下来就须要导出咱们的过程快照了,看看这个线程做了啥
jstack -l 2609 > ./2609.stack
再用grep查看一下线程在文件里做了啥
cat 2609.stack |grep 'b26' -C 8
发表回复