CPU 使用率百分比和平均负载之间的差异,何时应该关注?

CPU 使用率百分比和平均负载之间的差异,何时应该关注?

我在这里搜索了多个答案,但找不到与此场景相关的答案,但如果您认为您找到了,请指出我。

我在这里添加数字是为了便于我自己的理解。

我有一个 96 核裸机 Linux 服务器,具有 256 GB RAM,专门用于运行内部编写的基于事件的分布式异步网络服务,充当缓存服务器。该守护进程以 32 个工作线程运行。除了获取和缓存的主要任务之外,该服务器还在几个额外的单独线程中执行各种相关任务,例如轮询其他成员的运行状况检查、将指标写入 unix 套接字等。工作线程值是“ t 进一步增加,因为增加这个值会增加缓存锁争用。该服务器没有太多磁盘活动,因为尝试批量写入指标,如果 unix 套接字发生故障,它只会忽略它并释放内存。

该实例是 9 节点集群的一部分,该节点的统计信息代表该集群中的其余实例。

随着最近入站流量的激增,我发现进程的 CPU 使用率百分比大幅上升,但平均负载仍然小于 1。

请查看下面的统计数据。

:~$ nice top
top - 19:51:55 up 95 days,  7:27,  1 user,  load average: 0.33, 0.28, 0.32
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
587486 cacher   20   0  107.4g  93.0g  76912 S  17.2  37.0   5038:13 cacher

有时会上%CPU升到 80%,但即使如此,平均负载也相当低,并且不会超过 1.5,这种情况主要发生在存在缓存未命中并且缓存器必须从上游获取它时,因此它主要是一组网络活动。据我了解,该服务在运行时执行的计算量大的操作是,当它必须将要缓存的项目存储到适当的分布式存储桶中时,它必须计算要缓存的项目的哈希值。对此服务的任何参数都没有设置任何 systemd 限制,并且还对其进行了调整以禁用该进程的内核 oomkiller,尽管它远未接近上限。其绑定的 systemd 套接字已经过调整,可以容纳更多的 tx 和 rx 缓冲区。

  • 为什么96核服务器上的平均负载小于1,而%CPU使用32线程的服务的负载一直在20%到80%之间波动?
  • 在 96 核服务器上,多少被认为是%CPU安全运行的安全值?它与使用多少个线程有关系吗?如果线程数增加,理论上是否可以接受更高的 CPU 使用率?

谢谢。

答案1

其他 SE 网站上对此问题有一些很好的答案这里这里。本质上,平均负载显示有多少进程正在等待某个 cpu 核心,同时%CPU表明核心的繁忙程度。

在 96 核服务器上,您可以 100% 运行所有 96 核,几乎不会出现任何问题。您可能不希望您的应用程序占用这样的所有资源,因为操作系统和其他进程需要一定数量或资源。

平均负载通常不是一个很好的指标。如果有大量进程执行 I/O,即使 CPU 利用率较低且应用程序的响应时间非常好,平均负载也可能非常高。

相关内容