jvm排查cpu占用过高的线程

问题描述:
cpu占用过高,服务器卡死,问题排查

java进程占用CPU过高常见的两种情况:
代码中有死循环或者接近死循环的操作
快速创建大量临时变量,导致频繁触发gc回收

在这里插入图片描述
问题解决:
1、用top命令找到cpu占用率最高的进程号是8958

top

2、top -Hp pid 命令找到该进程下cpu占用最高的线程(shift+p 按cpu排序,shift+m 按内存排序)

top -Hp 8958

在这里插入图片描述
3、使用 printf ‘%x\n’ PID (PID为上一步中获取到的线程号)转换成对应的16进制PID 5c7e(为什么要转换,因为用jstack工具导出的信息里面线程对应的nid是16进制的。)

 printf '%x\n' PID

在这里插入图片描述
4、使用jdk自带的工具jstack来排查问题所在

jstack -l 8958 | grep 5c7e -A 80

【注意:8958是第一步top命令找到的cpu占用最高的进程id,5c7e是该进程下cpu占用率最高的线程id】
[说明:-A 80 是关键字后的80行代码]
5、导出进程出错信息

jstack pid(进程pid)>stack.dump

当前目录下找堆栈文件就鳄鱼i
如果提示jstack命令未找到,则需要跑到jdk安装目录下的bin目录
在这里插入图片描述
参考
https://blog.csdn.net/notsaltedfish/article/details/80209538?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

发布了21 篇原创文章 · 获赞 3 · 访问量 1031

猜你喜欢

转载自blog.csdn.net/qq_37603187/article/details/104457240