1.在线分析工具
perfma: https://console.perfma.com/
获取线程 Dump 文件的命令:
1 | jstack -l <pid> > 生成的文件名 |
获取内存 Dump 文件的命令:
1 | jmap -dump:format=b,file=<dumpfile.hprof> <pid> |
2.mat
JVM内存分析工具(Memory Analyzer Tool,MAT)
参考:https://www.cnblogs.com/liuchuanfeng/p/8484641.html
在首页上比较有用的是Histogram和Leak Suspects
Histogram(统计图)
可查看内存中实例的个数和大小,在子tab中按照包分组查看。优先关注自定义包的占用情况。
多次dump文件可对比,观察变化情况
Leak Suspects(可疑泄露)
点击在tab中查看可能泄露的对象,优先关注自定义包下的类
3.jstat
JVM性能实时监控的命令行工具
参考:https://blog.51cto.com/jerrymin/2352786
1.使用jstat -gc显示gc的信息,查看gc的次数,及时间
1 | jstat -gc <pid> 250 20 |
2.使用jstat -gcutil统计gc信息
1 | jstat -gcutil <pid> |
3.使用top -Hp显示进程所有的线程信息查找CPU耗时最长线程PID
1 | top -Hp <pid> |
4.查找耗时进程是哪个函数
1 | jstack <pid> |grep 3dec |
4.btrace
在线跟踪运行代码执行情况
参考:http://jm.taobao.org/2010/11/11/509/
5.JVM启动参数配置
1 | java -Dserver.port=8071 |
参考文章:
手撕 JVM 垃圾收集日志:
https://zhuanlan.zhihu.com/p/97002196
JVM 你不可不知的参数:
https://mp.weixin.qq.com/s/thnH0qXK67jVmxkAaHmaIg