多核机器 - cpu 负载指标

Multi core machine - cpu load metric

在多核机器中,了解 cpu 是否加载的最佳指标是什么?

我有一个向 apache CGI 服务器发送 post 请求的 Web 应用程序。 CGI 服务器遍历 post 数据并为循环中的每个项目启动 perl 进程。由于来自客户端的请求最终会到达单个端点,我担心是否最终会创建服务器无法处理的大量进程。因此,我想了解在从循环启动新进程之前应该检查哪些系统指标。

注:我有一台20核的机器。

之所以不容易找到答案,是因为它取决于您的流程的性质,以及哪个系统约束是您的限制因素。

对于 CPU 密集型工作,那么要查看的指标是平均负载 - 平均负载是对处于可运行状态的进程的度量 - 非常粗略,如果 LA 与核心数相同,那么你最多 运行 你的 CPU。

然而,越来越多的情况是 CPU 不再是限制因素 - 您的内存量可能是有限的,而需要大量内存的进程会消耗它。 'spare' 内存用于缓存,所以填满整个内存实际上开始减慢速度(因为你有一个较小的缓存)。过度溢出可用资源将导致交换或 OOMkiller。

但是正如您提到的 apache 和 web,那么您的网络管道很可能是一个限制因素 - 从本地主机控制带宽实际上非常困难。

然后是磁盘 IO - 这也可能是一个因素 - 我认为这对于 Web 服务器来说不太可能,因为您的出站网络通常会有更严格的限制。

这完全取决于您的进程在做什么 - 如果它们是轻量级的 'helpers' 并且大部分处于空闲状态,或者是重量级的 'grinders' 都会引入明显的负载。

所以我能给出的最佳答案是一个非常模糊的估计 - 如果您的进程是 CPU 密集型,则将它们限制在每个核心 2 个。如果您的进程是内存,则目标是消耗大约 50% 的系统 RAM。如果您的进程是 IO 密集型的,则目标是消耗大约 50% 的 IO(网络或磁盘)。