如何定位消耗CPU最多的线程
首先通过top -Hp 
cpu占用率最高的线程id是 2017
使用python可以快速得到对应的16进制
1 | >>> hex(2017) |
不用Python也可以,linux机器直接
1 | printf "%x" 2017 |
使用jstack来查询进程对应的线程堆栈:
1 | jstack <pid> | grep -A50 '0x7e1' |
PS.
jstack是JDK自带的一种命令行工具,可以用来查看Java程序中各个线程的状态、堆栈信息、锁情况等。使用jstack工具可以帮助开发人员快速定位Java程序中的性能问题和死锁等问题。
jstack的主要作用:
- 查看Java程序中各个线程的状态:通过jstack命令可以查看Java程序中每个线程的状态,如执行状态、等待状态、睡眠状态等,从而帮助开发人员快速定位线程出现的问题。
- 查看线程堆栈信息:通过jstack命令可以查看Java程序中每个线程的堆栈信息,包括线程调用栈信息、方法名、行号等,从而帮助开发人员定位程序中的问题。
- 查看锁情况:通过jstack命令可以查看Java程序中每个线程所持有的锁信息,包括锁的类型、持有者等,从而帮助开发人员快速定位程序中的死锁问题。