服务器cpu飙升排查

355 阅读1分钟

1.通过top查看是哪个进程占用cpu最多

2.如果是java程序,则可以进一步使用

top -p [pid] -H

查看到具体的线程 然后使用

jstack -l -F [pid]

查询当前的java进程的线程状态、线程栈、是否有死锁等信息 这个时候需要注意下,top中的pid和jstack dump出来的线程对应关系。 把top中的pid转换成16进制。如1913经过16进制转换就是 jstack dump中java线程的nid(native thread id) 具体步骤如下:

1913由10进制转换成16进制

printf %x 1913
779
printf %x 1914
77a
printf %x 1915
77b
printf %x 1916
77c

得到的值查询时需要加上0x,表示16进制

在jstack dump出来的文件搜索当前id的线程(-C表示输出该行的上下行数)

cat jstack.dump | grep "nid=0x779" -C 10

3.如果是mysql引起的,则一般是慢查询导致,可进入mysql执行

show processlist;

查看,或者有开启慢查询的话可直接查看慢查询文件