Linux下查看消耗CPU的线程 占用 100% java 堆栈? / 如何找到 最耗费资源的 java 线程?
父文章 人人都是面试_个人渣记录仅为自己搜索用的博客-优快云博客
父文章 : java 定位实战_个人渣记录仅为自己搜索用的博客-优快云博客
其他排查: java 进程内存占用排查. 除了堆之外
javaweb 项目部署后发现很耗cpu,需要查出问题所在
写个测试程序,记相关步骤:
故意写个死循环
public class TestCpu {
public static void main(String[] args) {
while (true){
new Object();
}
}
}
1. 终端:top -o %CPU
查看消耗cpu的进程 PID=2864
或者 找到应用进程 jps | grep 应用名
2. "ps -mp 2864 -o THREAD,tid,time" | sort -k2 -r | head -n 20
或者 top -Hp #PID
找到该线程使用CPU 最高的线程
查看线程TID=16132
3. 把线程ID转为16进制
printf "%x\n" 16132 得到 "3f04"
4. 然后查看堆栈信息
jstack 2864 | grep "3f04" -A 30