我正在运行 Ubuntu Linux 12.04.1,带有 VirtualMin 4.08.gpl GPL 和 2 个 CPU 内核。
在过去几周里,它几乎一直以远高于 5 的平均负载运行,通常接近 10,有时甚至达到 20。
目前,CPU 平均负载:9.20(1 分钟)8.20(5 分钟)7.81(15 分钟)
同时,VirtualMin 返回:
Virtual Memory: 996 MB total, 15.44 MB used
Real Memory: 3.80 GB total, 972.43 MB used
Local disk space: 915.94 GB total, 116.03 GB used
重新启动 ( shutdown -rf now
) 机器几次,果然迟早我们会恢复到高 CPU 负载。
在高 CPU 下运行top
(或htop
)不会返回任何重要信息 - 事实上,观察几分钟,最高的项目可能会高 3% CPU。
Top 也返回这个:
Cpu(s): 2.2%us, 1.2%sy, 0.0%ni, 0.0%id, 96.5%wa, 0.0%hi, 0.2%si, 0.0%st
我对此%wa
感到担忧,因为它是如此之高——似乎保持在 80% 以上。我知道这是等待中的%,但不确定这在实际中意味着什么。
我可以从哪里开始调试并找出导致 CPU 负载过高的原因?
答案1
这些不是“CPU 平均负载”,而是系统“平均负载”。这并不一定意味着您的 CPU 很忙,而是您系统中的某些东西很忙。该值来自更详细的解释/proc/loadavg
:man proc
/proc/loadavg
该文件中的前三个字段是负载平均数字,给出了运行队列(状态 R)或等待磁盘 I/O(状态 D)中平均 1、5 和 15 分钟的作业数量。它们与 uptime(1) 和其他程序给出的负载平均数相同。第四个字段由两个用斜杠 (/) 分隔的数字组成。第一个是当前可运行的内核调度实体(进程、线程)的数量。斜杠后面的值是系统上当前存在的内核调度实体的数量。第五个字段是系统上最近创建的进程的 PID。
因此,您看到的是正在运行或等待磁盘的进程的平均值。
如果您看到平均负载为 20,则意味着平均有 20 个进程处于“运行”或“等待”状态。您可以让平均负载非常高而 CPU 非常低,或者平均负载非常低而 CPU 非常高,因为它们没有任何关系。
高%wa
可能是某个进程以惊人的频率破坏磁盘,导致其他一切都变慢,所以找出罪魁祸首,从 D 进程开始。这wa
意味着 IO 在大多数 top 实现上等待。