Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

如何快速定位JVM中消耗CPU最多的线程

如何定位消耗CPU最多的线程

首先通过top -Hp 来看这个进程里所有线程的CPU消耗情况,得到类似下面的数据:

cpu占用率最高的线程id是 2017
使用python可以快速得到对应的16进制

1
2
>>> hex(2017)
'0x7e1'

不用Python也可以,linux机器直接

1
printf "%x" 2017

使用jstack来查询进程对应的线程堆栈:

1
jstack <pid> | grep -A50 '0x7e1'

PS.

jstack是JDK自带的一种命令行工具,可以用来查看Java程序中各个线程的状态、堆栈信息、锁情况等。使用jstack工具可以帮助开发人员快速定位Java程序中的性能问题和死锁等问题。

jstack的主要作用:

  1. 查看Java程序中各个线程的状态:通过jstack命令可以查看Java程序中每个线程的状态,如执行状态、等待状态、睡眠状态等,从而帮助开发人员快速定位线程出现的问题。
  2. 查看线程堆栈信息:通过jstack命令可以查看Java程序中每个线程的堆栈信息,包括线程调用栈信息、方法名、行号等,从而帮助开发人员定位程序中的问题。
  3. 查看锁情况:通过jstack命令可以查看Java程序中每个线程所持有的锁信息,包括锁的类型、持有者等,从而帮助开发人员快速定位程序中的死锁问题。