Linux服务器cpu爆满排查

cpu爆满

Posted by BY tang on June 1, 2020

Linux服务器cpu爆满排查思路

服务器cpu爆满,然后就会被电话call爆,临时解决方法就是去重启tomcat服务,可是不久之后就又会出现,所以只能狠下心来解决这个问题

之前都没有遇到过这方面的问题,一开始也是无从下手,只能去度娘找,见到啥方法都去试试。绕了几圈之后终于找到问题所在。

一、top 查看哪个进程 查看pid

二、top Hp pid 查看哪个线程 占用高

三、转16进制 pringf %x 线程pid

四、输出响应pid所对应的堆栈情况文件:jstack pid >/home/a.txt

五、到/home目录下找到a.txt文件下载到本地,然后用第三步中找到的值在文件中查找定位。

六、分析该线程堆栈在做什么导致的问题。

"http-nio-80-exec-4" daemon prio=10 tid=0x00007f27702c5000 nid=0x18d3f runnable [0x00007f275e2ea000]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.getEntry(HashMap.java:465)
	at java.util.HashMap.containsKey(HashMap.java:449)
	..........

"http-nio-80-exec-10" daemon prio=10 tid=0x00007f277010b800 nid=0x18d45 runnable [0x00007f26e33ec000]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.getEntry(HashMap.java:465)
	at java.util.HashMap.containsKey(HashMap.java:449)
	.........

水落石出,上面的两个线程堆栈最终都指向了hashmap的问题,那么问题就定位到了。接着就是如何去解决问题。