# 线上CPU占用过高排查方法

系统:CentOS7

*1.*top命令查看占用CPU的进程pid。

top
1

结果:

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND            
  4287 root      20   0       0      0      0 S   0.3  0.0   1:17.95 xfsaild/dm-0
  9040 mysql     20   0 1185580 184212   5868 S   0.3  4.8   2:33.76 mysqld 
  19525 dmadmin   20   0 3509408 157400  13748 S   0.3  4.1   3:01.23 java
  23179 root      20   0       0      0      0 S   0.3  0.0   0:00.06 kworker/0:0
  1 root      20   0  128160   6684   4164 S   0.0  0.2   0:05.64 systemd 
1
2
3
4
5
6

*2.*查看指定进程下线程的CPU占用。

top -H -p pid
#for example:
top -H -p 19525
1
2
3

结果:

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                19536 dmadmin   20   0 3509408 157400  13748 S  0.3  4.1   1:56.24 java                  19525 dmadmin   20   0 3509408 157400  13748 S  0.0  4.1   0:00.00 java                  19526 dmadmin   20   0 3509408 157400  13748 S  0.0  4.1   0:01.15 java
1

*3.*使用 jstack -l [pid] > jstack_log ,导出堆栈信息。

jstack -l [pid] > jstack_log
#for example:
jstack -l 19536 > jstack_log
1
2
3

*4.*排查堆栈信息。

备注:根据线程id还可以做其他的排查工作。