![服务器看似空闲,但负载读数却非常高](https://linux22.com/image/566575/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9C%8B%E4%BC%BC%E7%A9%BA%E9%97%B2%EF%BC%8C%E4%BD%86%E8%B4%9F%E8%BD%BD%E8%AF%BB%E6%95%B0%E5%8D%B4%E9%9D%9E%E5%B8%B8%E9%AB%98.png)
我想知道你们是否遇到过这样的问题,即报告的服务器负载确实很高,但没有任何参数似乎表明它很忙。我需要再次检查,但我认为这只会在我启动 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
具体取决于您安装的内容)查看一些有关磁盘使用情况的统计数据。iostat
dstat
相比之下,我的一个相当繁忙的 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 线程数。