playground

CPU利用率过高

以下方法仅适用于Linux,不适用于MacOS。

通过top工具查看CPU使用率较高的进程号,再通过以下命令列出该进程下的线程。

top -Hp <pid>

通过jstack工具查看该进程的堆栈快照。

jstack <pid>

会得到下面这样的结果。

"Thread-0" #8 prio=5 os_prio=0 tid=0x00007f85dc1cd800 nid=0x7c29 runnable [0x00007f85c9924000]
   java.lang.Thread.State: RUNNABLE
	at Main.lambda$main$0(Main.java:5)
	at Main$$Lambda$1/250421012.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:748)

由于jstack输出的线程号是16进制,因此我们需要把从top工具中找出的线程号转换成16进制。

printf "%x\n" <tid>

这样就得到了16进制的线程号,此时再去jstack的输出结果根据线程号(nid)查找堆栈信息即可。