如何在没有明显进程的情况下对高负载进行故障排除

All*_*ate 20 top

我在笔记本电脑上运行 Ubuntu 13.10。最近,从睡眠中醒来后,我发现计算机很热,检查顶部并发现平均负载为1.00。我关闭了 Chrome,各种守护进程,没有效果。

我重新启动并启动了一个终端并再次检查 top,看到负载迅速飙升至 1.75,然后慢慢稳定回 1.0 - 1.2 左右:

top - 09:49:17 up 36 min,  2 users,  load average: 1.01, 1.10, 1.01
Tasks: 267 total,   1 running, 266 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.9 us,  0.4 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8069288 total,  2885572 used,  5183716 free,   123652 buffers
KiB Swap:  7711332 total,        0 used,  7711332 free,  1661816 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                                                                        
 1420 root      20   0  589m 144m 131m S   3.4  1.8   0:36.49 Xorg                                                                                                                                           
 6233 user1    20   0  986m  83m  31m S   2.7  1.1   0:19.89 chrome                                                                                                                                         
 3708 user1    20   0  749m  19m  12m S   1.8  0.3   0:06.58 gnome-terminal                                                                                                                                 
 3526 user1    20   0 1350m  67m  28m S   1.4  0.9   0:26.19 compiz                                                                                                                                         
 4014 user1    20   0 1022m 126m  52m S   1.1  1.6   0:44.34 chrome                                                                                                                                         
Run Code Online (Sandbox Code Playgroud)

我手动检查了 /proc/loadavg,同样的故事:

sudo cat /proc/loadavg
1.20 1.16 0.99 3/614 6254
Run Code Online (Sandbox Code Playgroud)

ps auxwwwf 没有显示任何消耗超过 6.0% CPU 的进程。

iostat:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.63    0.00    0.13    0.00    0.00   99.25

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
Run Code Online (Sandbox Code Playgroud)

免费-m:

             total       used       free     shared    buffers     cached
Mem:          7880       2841       5039          0        120       1651
-/+ buffers/cache:       1068       6811
Swap:         7530          0       7530
Run Code Online (Sandbox Code Playgroud)

显然,某些进程使 CPU 饱和,但它似乎没有出现在进程列表中。某种隐藏的 Linux 文件系统检查器?根工具包?任何想法如何找到有问题的过程?

Sob*_*que 26

平均负载并不意味着你认为它意味着什么。这不是关于即时 CPU 使用率,而是关于有多少进程正在等待运行。通常这是因为很多东西都需要 CPU,但并非总是如此。一个常见的罪魁祸首是等待 IO 的进程——磁盘或网络。

尝试运行ps -e v并查找进程状态标志。

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").
Run Code Online (Sandbox Code Playgroud)

这是从ps手册页,所以你可以找到更详细的有-RD过程可能是特别感兴趣的。