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的问题,那么问题就定位到了。接着就是如何去解决问题。