有时cpu负载很高,但是看进程列表又没有高cpu的进程,如下:
top - 22:47:59 up 3 days, 12:10, 1 user, load average: 2.54, 3.25, 2.96
Tasks: 246 total, 6 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 78.1 us, 19.9 sy, 0.0 ni, 0.7 id, 0.0 wa, 0.0 hi, 1.3 si, 0.0 st
KiB Mem : 2017088 total, 447836 free, 545376 used, 1023876 buff/cache
KiB Swap: 2097148 total, 1755388 free, 341760 used. 1257260 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
72327 root 20 0 10740 5048 4224 S 2.3 0.3 0:48.61 docker-containe
93342 daemon 20 0 336696 16144 8464 S 2.0 0.8 0:00.51 php-fpm
93337 daemon 20 0 336696 16144 8464 S 1.7 0.8 0:00.49 php-fpm
93345 daemon 20 0 336696 16144 8464 S 1.7 0.8 0:00.49 php-fpm
93356 daemon 20 0 336696 16144 8464 S 1.7 0.8 0:00.48 php-fpm
93334 daemon 20 0 336696 16144 8464 S 1.3 0.8 0:00.50 php-fpm
28554 root 20 0 783636 37292 14508 S 1.0 1.8 2:30.61 dockerd
72400 systemd+ 20 0 33172 1436 16 S 1.0 0.1 0:21.19 nginx
93333 root 20 0 32460 5312 4632 S 1.0 0.3 0:00.31 ab
这时就要考虑可能是短时进程不断的关闭重启导致,有可能是以下情况
- 应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过 top 等工具也不容易发现
- 应用本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用相当多的 CPU
对于这类进程,我们可以用pert top
或者 pstree
或者 execsnoop 找到它们的父进程,再从父进程所在的应用入手,排查问题的根源。