A Troubleshooting Case On Java 100 Percent CPU Usage

2017/08/10

早上遭遇一起"线上 Java Web 占用 100%CPU"的紧急事件, 将排查处理过程记录如下。

* 确定Java进程号 <pid>
    ps -ef | grep <app> | grep -v grep

* 确定耗费CPU资源的线程 <pid_sub>
    ps -Lfp <pid>
    ps -mp <pid> -o THREAD, tid, time
    top -Hp <pid>
    
* 将线程号转变为十六进制(因为jstack中以十六进制确定线程ID)
    printf "%x\n" <pid_sub>
    --- 例如输出 54ee

* 在Java进程的jstack信息中确定 0x54ee 的位置
    jstack <pid> | grep 54ee 
    --- 例如输出 "http-bio-7001-exec-4" #59 daemon prio=5 os_prio=0 tid=0x00002aaac2e5c000 nid=0x966 runnable [0x000000004434e000]...
    --- 下面就是具体线程栈信息