为什么所有进程 CPU(%) 的总和不等于 top 输出中的总 CPU(%) 利用率

为什么所有进程 CPU(%) 的总和不等于 top 输出中的总 CPU(%) 利用率

在所附的 top 命令输出图片中,你可以看到空闲率为 96.8%,这意味着 CPU 利用率为 3.2%,但是,列出的所有进程的 CPU 百分比总和(图片裁剪为 CPU% > 0.0)大于总利用率(3.2%)

TOP 命令输出

在另一个顶级实例中,CPU 利用率(100-空闲)为 14%,但显示最顶部的进程“Chrome”单独消耗了 253%。我不确定 chrome 进程如何消耗超过 100% 的 CPU

如果我错了,请帮助我解释顶部输出

答案1

这不是“CPU”列显示的内容。来自man top

   Line 2 shows CPU state percentages based on  the  interval  since  the
   last refresh.

   As   a  default,  percentages  for  these  individual  categories  are
   displayed.  Where two labels are shown below, those  for  more  recent
   kernel versions are shown first.
       us, user    : time running un-niced user processes
       sy, system  : time running kernel processes
       ni, nice    : time running niced user processes
       id, idle    : time spent in the kernel idle handler
       wa, IO-wait : time waiting for I/O completion
       hi : time spent servicing hardware interrupts
       si : time spent servicing software interrupts
       st : time stolen from this vm by the hypervisor

因此,当您看到 98.8% 时,这并不意味着 98.8% 的可用 CPU 功率。它告诉您时间自上次top轮询系统以来,CPU 在每个类别中所花费的时间。默认情况下,top每 2 秒轮询一次系统。因此,您的行告诉您,您的 CPU 在过去 2 秒的大部分时间处于空闲状态。

我在这里发布了有关其工作原理的更详细描述tophttps://superuser.com/a/575330/151431

答案2

根据我的(非常基本的)理解,标题中的 CPU 消耗是总 CPU(所有 CPU/核心)的百分比,而%CPU表中的(默认)是每个 CPU/核心的百分比。

这意味着表中百分比的总和除以系统中的 CPU/核心数量应该大致与标题中的 CPU 消耗相匹配。

此外,手册页状态:

1. %CPU  --  CPU Usage
   The  task's share of the elapsed CPU time since the last screen update, expressed as a
   percentage of total CPU time.

   In a true SMP environment, if a process is multi-threaded and top is not operating  in
   Threads mode, amounts greater than 100% may be reported.  You toggle Threads mode with
   the `H' interactive command.

   Also for multi-processor environments, if Irix  mode  is  Off,  top  will  operate  in
   Solaris  mode  where  a  task's cpu usage will be divided by the total number of CPUs.
   You toggle Irix/Solaris modes with the `I' interactive command.

您可以在最后一段中看到,如果按I( Shift+ i),则会切换到一种模式,其中每个进程的 CPU 时间除以 CPU/核心的数量。在此模式下,表格的总数应与标题中的数字相匹配。

来自我自己的 4 核系统的示例

Irix 模式(默认)- 表中的总数大约是标题中总数的 4 倍。

在此处输入图片描述

Irix 模式离开(Solaris 模式)- 表中的总和与标题中的总和大致相同。

在此处输入图片描述

另外,请参阅@terdon 的回答,了解为什么数字不完全相同 - 并添加分数的四舍五入等。

在批处理操作中禁用 Irix 模式

要在批处理操作中禁用 Irix 模式,请执行以下操作:

  1. top以正常模式运行
  2. 使用以下方式禁用 Irix 模式:Shift+i
  3. 保存当前用户的配置文件:Shift+w

配置文件位于$HOME/.config/procps

现在,当您为该用户运行 top(包括批处理模式)时,Irix 模式将被禁用。

要使其成为root用户的默认设置,请切换到 root(使用sudo -s)并运行上述 3 个步骤。

由于 top 是一个相对简单的程序,因此无法使用自定义配置文件运行。如果您需要自定义配置或 CPU 指标,请考虑使用 top 输出以外的其他方法。

相关内容