linux cpu过高排查流程

CPU 使用率

  1. 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙
  2. 系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断),系统 CPU 使用率高,说明内核比较繁忙
  3. 等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait 高,说明系统与硬件设备的 I/O 交互时间比较长
  4. 软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,表明系统发生了大量的中断

怎么排查 CPU 过高问题

使用 top 命令,查看系统相关指标。

top 
top - 15:24:58 up 49 min,  3 users,  load average: 0.36, 0.16, 0.09
Tasks: 103 total,   1 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  2.7 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995456 total,   745644 free,   124492 used,   125320 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   733004 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                 
   925 root      20   0  574280  19516   6148 S  0.0  2.0   0:00.48 tuned                                                                                   
   655 polkitd   20   0  612240  12220   4752 S  0.0  1.2   0:00.07 polkitd                                                                                 
   657 root      20   0  626676   9208   7036 S  0.0  0.9   0:00.17 NetworkManager                                                                          
  1615 root      20   0  162232   6672   4900 S  0.7  0.7   0:12.43 sshd                                                                                    
   653 root      20   0  168308   5180   3748 S  0.0  0.5   0:00.02 VGAuthService                                                                           
   654 root      20   0  273192   4880   3748 S  0.0  0.5   0:04.19 vmtoolsd                                                                                
   924 root      20   0  113004   4332   3296 S  0.0  0.4   0:00.00 sshd                                                                                    
  1087 postfix   20   0   89980   4120   3112 S  0.0  0.4   0:00.00 qmgr
  1. 找到相关进程后,我们则可以使用top -Hp pid或pidstat -t -p pid命令查看进程具体线程使用 CPU 情况,从而找到具体的导致 CPU 高的线程
  2. % us 过高,则可以在对应 Java 服务根据线程 ID 查看具体详情,是否存在死循环,或者长时间的阻塞调用。Java 服务可以使用 jstack
  3. 如果是 % sy 过高,则先使用 strace 定位具体的系统调用,再定位是哪里的应用代码导致的
  4. 如果是 % si 过高,则可能是网络问题导致软中断频率飙高
  5. % wa 过高,则是频繁读写磁盘导致的。
posted @ 2025-08-12 21:21  阿峰博客站  阅读(23)  评论(0)    收藏  举报