所以...我在我们的电子邮件服务器上看到了一些非常奇怪的负载问题。它在上午 8 点到 9 点左右开始飙升(巧合的是人们开始工作的时间),但在上午 11 点左右下降。CPU使用率保持正常,我有足够的可用内存,没有交换。昨天我们有一个非常高的 iowait% (49.75) 和非常高的负载 (40),今天我们“只”有 11-12 的负载,iowait% 在 3-4 之间。
所有迹象都指向 imapd 是罪魁祸首(courier-imap),因为当我停止它时,负载突然开始降低,并在 2-3 分钟内恢复正常。我确实有大约 40-60 个在运行。我们使用 Thunderbird,每个打开 5 个连接,我在大多数工作站上将其降低到 1,它有点帮助(负载下降到 5-7),然后......整个服务器在上午 11 点左右恢复正常。
我仍然有大约 30 个 imapds 正在运行,但负载完全正常(介于 0.2 和 0.4 之间)。所以......我真的不明白为什么会发生这种情况,因为从逻辑上讲,如果这会是问题的原因,它应该更高。
这是具有 1gig ram 的 Linode 1080 VPS。
(chkrootkit / rkhunter 没有表现出任何异常。)
如果您使用的是 VPS,您将与您的 VPS 不可见的其他用户共享 IO 带宽、CPU 时间和内存带宽。
我可以自信地说,托管在物理机上的另一个 domU 正在消耗大量的一个或多个这些资源(很可能是 IO)。
如果您使用
iostat -x
,您可能会发现您的服务时间波动很大,这将解释为什么您的平均负载会因为磁盘 IO 上的进程阻塞而飙升。据我了解,*nix 系统上的负载意味着“等待运行的进程数”。这并不一定意味着他们正在等待 CPU。他们可能正在等待磁盘访问或网络连接完成。
例如,我曾经管理过一个系统,其中负载开始飙升至 80 以上,有时会导致系统爬行。最终是因为外部 LDAP 服务器出现故障,本地系统正在针对客户端执行身份验证请求。
如果您的 CPU 和 iowait 看起来不错,我会寻找您的应用程序具有的网络依赖关系,这可能是异常高负载读数的罪魁祸首。
就像第一张海报指出的那样,它很可能是 IO。我实际上在我的虚拟服务器上有相同的设置,并且经常看到相同的问题。问题是虚拟服务器(如 vserver)的当前容器方法不能有效地分离 IO。如果您有兴趣,这是一份白皮书,在第 13 页对其进行了深入解释。http://www.cs.princeton.edu/~mef/research/vserver/paper.pdf