查看进程里面各线程占用CPU的情况

在开发中,当我们遇到CPU飙高的时候,想要知道是哪个线程在搞事情,就需要查看进程里面各线程占用CPU的情况,这个命令就可以帮助我们。

执行命令:

ps H -eo pid,tid,%cpu |grep 2266

2266为java进程id

执行结果如图(可以看出2276占用cpu很高),

那怎么看这个2276在我们代码所在呢,其实可以使用jstack命令查看栈信息,但是所看到里面的线程id是16进制的,这里的2276是十进制,要找到2276所对应的16进制id在哪里就需要做一个转换,再拿这个16进制去匹配就可以了,具体做法:

2276十进制转16进制,运行命令:

printf "%x \n" 2276

得到的8e4就是16进制

在执行命令:jstack 2266

d打印的信息如图,在里面就可以看见8e4对应的线程(8e4前面的0x代表的16进制)

在这个图中,可以看到这个线程id对应的代码里面报了Application.java的第9行有问题,那么再去看自己的代码就行了。