为什么Linux中top报告的CPU使用率超过100%?

为什么Linux中top报告的CPU使用率超过100%?

我曾看到过 CPU 使用率超过 100%。这怎么可能呢?是不是因为我有四个 CPU 核心,所以 100% 并不是最大值?

另外,当程序执行此操作时,除了使用命令之外,我还可以在 top 中做什么k

答案1

据我所知,top 显示的 CPU 使用率与 1 个核心的功率有关,即如果您的任务占用了 200% 的 CPU,那么它就占用了两个核心。

答案2

来自顶部手册页

   k: %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 'Irix mode' is Off, top will operate  in  number  of
  CPUs.  You toggle 'Irix/Solaris' modes with the 'I' interactive com-
  mand.

因此,是的,top 显示了每个核心的 CPU 百分比,但是您可以按“I”来切换此行为。

答案3

是的,如果 top 中的进程超过 100% 或 top 显示负载 >1.0,则意味着占用了多个核心,或者系统超额认购。超额认购意味着需要放到核心上的工作比物理上可管理的要多。

top还可以按不同的参数(如已用内存)对视图进行排序。如果您想查看可以按什么进行排序,请参阅 的帮助或手册页top

您还可以查看有关进程本身的各种信息,例如进程使用的虚拟内存或驻留内存、进程是否处于休眠状态或当前正在运行,以及使用的 CPU 时间。

top中的load average,如果需要的话也可以通过命令来查看uptime

答案4

如果启用了超线程,则显示的 CPU 使用率top是每个 CPU 的使用率,不是核心。例如,在具有 24 个核心且每个核心有 2 个线程(总共 48 个 CPU)的服务器上,使用率可能高达 4800。运行可lscpu -p提供有关核心和 CPU 的准确信息:

$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
...
...
...
46,22,1,1,,22,22,22,1
47,23,1,1,,23,23,23,1

我做了以下步骤来验证上述答案:

  1. 在服务器上,我启动了这个循环:
$ while true; do x="reee";x="asdasd";z="asdasdasd;";  done
  1. 在一个单独的线程上,我运行top并验证了 bash 是否使用了大约 100% 的 CPU:
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 14791 hpaknia   20   0  129156   5188   1856 R  99.7  0.0  28:08.54 bash
  1. 然后在同一个 top 终端中,我按下1查看每个 CPU 的使用情况。48 个 CPU 中只有 CPU 线程 3 使用了 100% 的 CPU:
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

在我的情况下,每个核心有 2 个 CPU 线程。如果top百分比显示每个核心的使用情况,则该值必须是 50%,但事实并非如此。因为top显示的是每个 CPU 线程的使用情况。

相关内容