1. 分析思路
结合Linux和JDK命令一块分析
1)先用top命令查找cpu占用最高的进程;
2)ps -ef 或者jps进一步定位进程详情(具体什么程序);
3)定位到具体的线程或者代码:
ps -mp 进程 -o THREAD,tid,time -m:显示所有的线程 -p:pid进程使用cpu的时间 -o:该参数后是用户自定义格式
4)将需要的线程ID转换为16进制格式(英文小写格式);
printf "%x " 有问题的线程ID
5)jstack 进程ID | grep tid(16进制线程ID小写英文) -A60
jstack 5101 | grep 13ee -A60 //追踪进程5101的线程13ee的详情,并打印前60行
2. JDK自带的JVM监控和性能分析工具
1)性能监控工具
(1) jps(虚拟机进程状况工具)
(2) jinfo(Java配置信息工具)
(3) jmap(内存映像工具)
A. 作用:
生成Java应用程序的堆快照和对象的统计信息;
B. 官网
C. 相关case
映射堆快照:jmap -heap 进程ID
抓取堆内存:
- 生成hprof文件并下载到本地
- MAT分析插件工具
(4) jstat(统计信息监控工具)
A. 作用:
查看堆内存各部分的使用量,以及加载类的
B. 官网
C. 相关case
- 类加载统计
- 编译统计
- 垃圾回收统计