CPU 超载,但没有任何进程使用超过 1%

CPU 超载,但没有任何进程使用超过 1%

我正在监控一个有 2 核 CPU(4 个虚拟 CPU 核心)的 Cpanel(centos)服务器,它似乎已超载,因为我使用以下命令获取此值top

load average: 11.80, 13.30, 13.02
Cpu(s): 42.2%us, 11.7%sy,  0.0%ni, 35.6%id, 10.1%wa,  0.1%hi,  0.3%si,  0.0%st

但如果我查看进程列表(使用 top 或 ps),没有进程使用超过 1%

此外,进程 CPU 使用率(%)的总和等于 4,如果我甚至假设 0% 值是四舍五入的数字,并将其更改为 0.04(使用 1 位小数四舍五入为 0),则总和为 11(仍然小于 100%)。

我该如何正确解释这些数据?是否有一些隐藏的进程正在使我的 CPU 超载。

答案1

在 Linux 上,被阻止的进程也会影响平均负载。该命令ps -Al列出了所有进程。在其输出的第二列(S 代表状态)中,您将找到进程状态。我经常看到进程在等待磁盘“D”,这些进程会被计入平均负载。

ps 手册页中的完整状态列表为

   D    Uninterruptible sleep (usually IO)
   R    Running or runnable (on run queue)
   S    Interruptible sleep (waiting for an event to complete)
   T    Stopped, either by a job control signal or because it is being
        traced.
   W    paging (not valid since the 2.6.xx kernel)
   X    dead (should never be seen)
   Z    Defunct ("zombie") process, terminated but not reaped by its
        parent.

示例输出

FS UID PID PPID C PRI NI 地址 SZ WCHAN TTY 时间 CMD
4 S 0 1 0 0 80 0 - 4906 poll_s ? 00:00:23 初始化
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:02 kthreadd
1 R 0 3 0 99 80 0 - 0 ? 01:00:02 跑垒员
1 D 0 4 0 1 80 0 - 0 ? 01:00:02 装载机

如果这些是您唯一的进程,我们会看到大约 2 的负载,1 用于占用大量 CPU 的“运行器”,另外 1 用于等待磁盘的加载器。

非常精确的信息维基百科

空闲计算机的负载数为 0。每个使用或等待 CPU 的进程(就绪队列或运行队列)都会使负载数增加 1。大多数 UNIX 系统仅计算处于运行(在 CPU 上)或可运行(等待 CPU)状态的进程。但是,Linux 还包括处于不可中断睡眠状态(通常等待磁盘活动)的进程,如果由于 I/O 系统繁忙或停滞而导致许多进程在 I/O 中阻塞,则会导致截然不同的结果。1例如,这包括由于 NFS 服务器故障或介质速度慢(例如 USB 1.x 存储设备)而导致的进程阻塞。这种情况可能会导致平均负载升高,这并不能反映 CPU 使用率的实际增加(但仍能让人了解用户需要等待多长时间)。

答案2

您提供的最重要的信息并不一定意味着超载:

  • CPU 空闲 35%
  • 平均负载不一定太大(取决于服务器的预期用途)
  • 缺少 RAM 和交换信息

或者更确切地说,如果您所说的超载是指达到某些限制,那么它可能有各个方面:CPU 限制、网络和/或磁盘 I/O 限制、内存使用限制等。

您不应该尝试匹配各种 CPU 负载/使用情况视图 - 它们通常意味着不同的事情,并且视图也是在不同的时间戳收集的(统计信息收集不是原子的):

  • 平均负载意味着正在运行队列中的作业数,而不是 CPU 使用率:https://stackoverflow.com/questions/21617500/understanding-load-average-vs-cpu-usage
  • 由于各种原因,进程上下文中的 CPU %使用率数字不必加起来等于 100%,以下仅列举其中几点:
    • CPU 不会将所有周期都花在进程空间中
    • 在进程上下文中花费的各种周期在总体 CPU % 使用率线上的计数方式不同(同一进程在统计间隔内可能处于运行或等待 I/O 状态,从而导致总体 CPU % 使用率线上的 %us 和 %wa 数字)
    • CPU 可能在不再运行的进程上花费了周期,这些将计入总体 CPU % 使用率行中,但不会出现在任何进程行中

答案3

Peter 是对的。但这并没有回答你的问题。给它 12 个逻辑 CPU,这样负载就会低于 CPU 数量。这样,没有进程或线程需要等待额外的 CPU 周期来获得执行时间。

在顶部也打开线程视图。

我怀疑那里有一些多线程进程。

11% 系统时间可能表明存在网络瓶颈。

相关内容