机器CPU高,top又看不出来是哪个进程

2019-07-23  本文已影响0人  e20d9310ced3

(补充说明:其实top看不出来是哪个进程,是因为自己水平菜,用top -H或者top进去后,输入H就可以根据线程来查看,这样就能发现cpu占用高的线程了)

今天发现一台机器cpu跑高了,第一时间用top查看


top.png

并没有发现占用cpu高的进程,但是cpu使用的确很高。

使用另外一个命令htop


htop.png

使用htop发现是一个pid为32442的进程占用了100%的cpu,按后面的运行参数,并根据自身的业务,可以判断这是一个业务进程的其中一个线程。

使用ps命令查看业务进程pid,查出来是31519

先计算线程的16进制的值

printf "%x\n" 32442
7eba

然后用jstack pid将堆栈信息打印出来
jstack 31519 | grep 74ba -B 15 -A 15

堆栈信息打印出来后,就交给开发来处理了。

注:
使用jstack的时候报了个错,
Unable to open socket file: target process not responding or HotSpot VM not loaded
原因如下:
jvm运行时会生成一个目录hsperfdata_$USER($USER是启动java进程的用户),在linux中默认是/tmp,目录下会有些pid文件,存放jvm进程信息,而jmap,jstack等工具会读取/tmp/hsperfdata_$USER下的pid文件获取连接信息。所以需要运行这个jvm的用户来执行jstack命令
我这边使用tomcat用户来运行的,所以需要切换到tomcat用户来执行jstack即可

上一篇下一篇

猜你喜欢

热点阅读