服务器看似空闲,但负载读数却非常高

服务器看似空闲,但负载读数却非常高

我想知道你们是否遇到过这样的问题,即报告的服务器负载确实很高,但没有任何参数似乎表明它很忙。我需要再次检查,但我认为这只会在我启动 Passenger 后发生。我在专用虚拟主机上。

关于为什么会发生这种情况的任何提示或如何调试此负载值的想法?这是我的首选阅读材料,如果需要,我可以提供其他信息。

top - 13:34:38 up 122 days, 19:15,  1 user,  load average: 2.44, 2.02, 1.85
Tasks:  51 total,   4 running,  47 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.7%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1048576k total,   797196k used,   251380k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

答案1

如果负载高但 CPU 使用率低,则表明存在其他瓶颈。(正如 Janne 所说,平均负载为 2 并不是特别高,但深入了解系统正在做什么并不是一个坏主意。)

磁盘访问是平均负载高而 CPU 使用率低的最常见原因。您可以使用或 (vmstat具体取决于您安装的内容)查看一些有关磁盘使用情况的统计数据。iostatdstat

相比之下,我的一个相当繁忙的 Web 服务器在 vmstat 中显示 bi 列(块读入)为每 30 秒 100 个,bo 列(块写出)为每 30 秒 3000 个。该服务器的平均负载约为 1。

另一个可能的原因是大量进程执行的工作很少。我看到的大多数服务器都有 100 到 200 个进程。如果您的服务器有 500 或 1000 个进程,则可能会导致平均负载过高。

再次,为了进行比较,我们最近在邮件队列中收到大量电子邮件,这导致大约 1,000 个进程被启动来发送电子邮件。这导致平均负载上升到大约 70,并使系统难以使用。

答案2

感谢您的反馈,因为事实证明,正确答案(也是我的问题的关键)是我正在使用虚拟专用服务器。该服务器有 0.6 个处理器单元(即 2Ghz Xeon 中的 1.2Ghz)。这导致我的 top 和服务器健康监控软件出现奇怪的读数(new relic rpm 在 CPU 使用率图中称这次为“被盗”)。我现在更新为全核 VPS,负载降至其正确值 ~0.07。

答案3

平均负载 2 实际上并不高,实际上还很低。

您是否在某处看到了实际的性能问题?

答案4

我通常在一个或两个进程进入“D”状态时看到这种情况。这意味着它们正在等待某个 I/O。这可能是 NFS 共享超时或类似情况。如果它们是仅有的两个等待此存储设备的进程,则处于 IOWAIT 状态的 %CPU 不会增加太多。

需要明确的是,2.44 的平均负载可能高也可能低,具体取决于您的系统有多少 CPU 线程。如果您有带超线程的双核 Xeon,则有 4 个 CPU 线程。最高 4.0 的平均负载意味着系统处于满负荷或低于满负荷。在这样的系统上,超过 4.0 的平均负载意味着运行队列中的进程多于 CPU 线程数。

相关内容