CPU 负载非常高,但在顶部没有任何意义

rjb*_*ate 15 performance load

我正在运行 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
Run Code Online (Sandbox Code Playgroud)

已经重新启动 ( shutdown -rf now) 机器几次,并且肯定迟早我们会以高 CPU 负载备份。

Running top(或htop) 在高 CPU 下运行时根本没有返回任何显着的结果——事实上,观察它几分钟,最高的项目可能会占用 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
Run Code Online (Sandbox Code Playgroud)

%wa关注我,因为它是如此之高-似乎停留了80%以上。我知道这是 % 等待,但不确定这在实际中意味着什么。

我可以从哪里开始调试并找出导致高 CPU 负载的原因?

Bra*_*iam 19

这些不是“CPU 平均负载”,而是系统“平均负载”。这并不一定意味着您的 CPU 很忙,而是您系统中的某些东西很忙。这种价值来自于/proc/loadavgman proc解释了它的详细信息:

/proc/loadavg
Run Code Online (Sandbox Code Playgroud)

此文件中的前三个字段是平均负载数字,它给出了运行队列(状态 R)或等待磁盘 I/O(状态 D)中的作业数平均超过 1、5 和 15 分钟。它们与 uptime(1) 和其他程序给出的平均负载数相同。第四个字段由用斜杠 (/) 分隔的两个数字组成。其中第一个是当前可运行的内核调度实体(进程、线程)的数量。斜线后面的值是系统上当前存在的内核调度实体的数量。第五个字段是最近在系统上创建的进程的 PID。

因此,您所看到的是正在运行或等待磁盘的进程的平均值。

如果您看到平均负载为 20,则意味着平均有 20 个进程处于运行或等待状态。您可以让平均负载非常高而 CPU 非常低,或者负载平均非常低而 CPU 非常高,因为它们没有任何关系。

%wa高可以进行一些处理捣毁不可思议的频率,让一切慢的磁盘,因此弄清楚哪个才是罪魁祸首,开始为d的过程。这wa意味着 IO 等待大多数 top 的实现。

  • @Braiam - 我认为我在这里试图解决的总体要点非常清楚。 (2认同)