在多核机器中,了解cpu是否加载的最佳指标是什么?
我有一个Web应用程序,它向apache CGI服务器发送一个post请求。 CGI服务器遍历post数据并为循环中的每个项启动perl进程。由于来自客户端的请求最终会命中一个端点,我担心如果最终创建了许多我的服务器无法处理的进程。因此,我想了解在从循环启动新进程之前应该检查哪个系统度量标准。
注意:我有一台20芯机器。
答案 0 :(得分:2)
答案不容易找到的原因是它取决于您的流程的性质,以及哪个系统约束是您的限制因素。
对于CPU密集型工作,那么要查看的指标是负载平均值 - 负载平均值是可运行状态下进程的度量 - 非常粗略地说,如果LA与核心数相同,那么您运行的CPU处于最大。
然而,越来越多的情况是CPU不是限制因素 - 你可能拥有有限的内存,而内存饥饿的进程会消耗它。 'spare'内存用于缓存,因此填满整个实际开始减慢速度(因为你有一个较小的缓存)。溢出可用的将导致交换或OOMkiller。
但是当你提到apache和web时,很可能你的网络管道是一个限制因素 - 从本地主机控制带宽实际上是非常困难的。
然后是磁盘IO - 也可能是一个因素 - 我认为这对Web服务器来说不太可能,因为您的出站网络通常会受到更严格的限制。
这一切都取决于你的流程在做什么 - 如果他们是轻量级的'助手',大部分是空闲的,或者是重量级的“磨床”,这些都会引起明显的负担。
所以我能给出的最佳答案是一个非常模糊的估计 - 如果你的进程是CPU密集型的,那么每个核心的上限为2。如果您的进程是内存,则目标是消耗大约50%的系统RAM。如果您的进程是IO密集型的,那么目标是消耗大约50%的IO(网络或磁盘)。