找到Java中CPU使用率高的线程

在日常项目开发中,经常会遇到各种问题。其中,CPU使用率高是一个比较常见的问题。

在不借助外部工具的情况下,可以使用Linux自带的top命令,以及Java提供的堆栈查看命令jstack来进行定位。

获取进程ID

jps

或者

ps aux|grep java

查看进程内各线程的CPU使用情况

以进程ID 2622为例:

top -Hp 2622

按组合键shift+t,查看占用CPU最高的几个线程,记录下线程的ID。

假设我们找到占用CPU最高的线程ID为:2641。

打印出进程的堆栈信息

jstack 2622 > stack.log

或者

kill -3 $pid (Window按Ctrl+Break)

或者借助jconsole、jvisualvm等工具。

根据线程ID找到线程堆栈信息

将线程ID 2641 转为十六进制:a51。

找到线程对应的堆栈

grep -A10 a51 stack.log

十进制转为十六进制的3种方法

shell

$ printf %x 2641
a51

python

>>> hex(2641)
'0xa51'

java

Integer.toHexString(2641)

---转载本站文章请注明作者和出处 二进制之路(binarylife.icu),请勿用于任何商业用途---

留下评论