![当没有明显的进程时如何解决高负载问题](https://linux22.com/image/36743/%E5%BD%93%E6%B2%A1%E6%9C%89%E6%98%8E%E6%98%BE%E7%9A%84%E8%BF%9B%E7%A8%8B%E6%97%B6%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E9%AB%98%E8%B4%9F%E8%BD%BD%E9%97%AE%E9%A2%98.png)
我在笔记本电脑上运行 Ubuntu 13.10。最近,从睡梦中醒来后,我发现电脑很热,检查top发现平均负载为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
我手动检查了 /proc/loadavg ,同样的故事:
sudo cat /proc/loadavg
1.20 1.16 0.99 3/614 6254
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
自由-m:
total used free shared buffers cached
Mem: 7880 2841 5039 0 120 1651
-/+ buffers/cache: 1068 6811
Swap: 7530 0 7530
显然某些进程正在使 CPU 饱和,但它似乎没有显示在进程列表中。某种隐藏的 Linux 文件系统检查器?根工具包?有什么想法如何找到有问题的进程吗?
答案1
平均负载并不代表您所认为的意思。这与即时 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").
这是来自ps
联机帮助页,因此您可以在那里找到更多详细信息 -R
并且D
流程可能特别令人感兴趣。