在 linux 下使用很少 cpu 的高平均负载的通常解释是 IO 过多(或更恰当地说是不间断的 sleep)。
我有一个服务在 2 核 VM 集群上运行,该集群表现出适度的 CPU 使用率(~55-70% 空闲),但高于 2 平均负载,同时体验接近零的 IO、适度的上下文切换和无交换。轮询ps
我从未D
在进程状态列中看到。
该服务是在 unicorn 下运行的 ruby 1.9。它连接到两个上游 postgres 数据库,这些数据库提供非常快的 avg 语句执行(~0.5ms)。该服务记录的已用请求持续时间大约是它在我们的性能测试网络上更高压力负载下所显示的两倍。唯一看起来不正常的监控信号是平均负载(当然还有平均响应持续时间),其他一切(cpu、内存、io、网络、cswitch、intr)都是标称和匹配的预测。
系统是 Ubuntu 10.04.4 LTS“Lucid”。uname 是Linux dirsvc0 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux
. 管理程序是 VMWare ESX 5.1。
更新:@ewwhite 要求的更多信息。存储是映射到连接到 NetApp 的 vm 主机上的 NFS 装载的虚拟磁盘设备。我要指出的是,所有迹象都表明没有发生重大的磁盘 IO。该服务读取和写入网络套接字(~200KB/s)并进行普通访问和错误记录(速度约为 20KB/s)。vm 主机有一对千兆端口,连接到两个顶部机架交换机,每个交换机都将四个千兆端口绑定回核心路由器,全是铜线。每个 vm 主机具有 24 (4x6) 个物理内核和 150GB 内存,通常托管大约 30 个运行各种不同服务的类似大小的 vm 来宾。在生产中,这些主机永远不会在内存上过度使用,而只是在 cpu …