htop 在可视化中报告低 CPU% 的进程的高 CPU%

htop 在可视化中报告低 CPU% 的进程的高 CPU%

我试图对服务器应用程序中的负载有一个实际的了解。应用程序在 TCP 连接上读取大量数据。当我使用 来检查 CPU 利用率时htop,该进程经常报告高 (85-100+%) CPU%,尽管 CPU 可视化的数量htop要低得多。报告的 CPU% 与top.

示例输出 - 用户 tom pid 为 26655/26656 的进程的 CPU% 为 96.2,而我们似乎只使用了 CPU 1 的 6.9% 和 CPU 2 的 37.4%,总计 CPU 利用率为 44.3%。


  1  [|||                       6.9%]   Tasks: 48, 128 thr; 2 running
  2  [||||||||||||||           37.4%]   Load average: 0.06 0.10 0.09
  Mem[|||||||||||||||||||1.10G/3.70G]   Uptime: 1 day, 15:16:55
  Swp[                         0K/0K]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
26655 tom        24   4 3216M 63832 13056 S 96.2  1.6  0:33.24 java -jar java_go
26656 tom        24   4 3216M 63832 13056 R 96.2  1.6  0:32.31 java -jar java_go
  986 jerry      20   0 3576M  594M 18268 S 18.3 15.7  4h13:46 java -Dcom.sun.ma
 1479 jerry      20   0 3576M  594M 18268 S 16.3 15.7  3h37:02 java -Dcom.sun.ma
26881 tom        20   0  129M  2392  1540 R  1.0  0.1  0:00.08 htop

运行该流程可以time发现用户时间加上系统时间远小于实际时间,这表明可视化更加准确:

real    1m26.787s
user    0m32.344s
sys     0m23.024s

( user + sys / real = 0.6380)

然后我htop使用一个重复执行求幂来消耗 CPU 的无意义程序来比较这种行为。输出htop更接近我的预期 - 相关进程消耗了 105% CPU,并且可视化显示 100% 的 CPU 1 已使用。但请注意,报告的 CPU 消耗为 105%,而总 CPU% 仅为 102.2%。


  1  [||||||||||||||||||||||||100.0%]   Tasks: 46, 117 thr; 2 running
  2  [|||                       2.2%]   Load average: 0.39 0.11 0.08
  Mem[|||||||||||||||||||1.06G/3.70G]   Uptime: 1 day, 15:12:23
  Swp[                         0K/0K]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
25636 tom        20   0  122M  4604  2032 R 105.  0.1  0:16.32 /usr/bin/python .
  986 jerry      20   0 3576M  595M 18268 S 10.5 15.7  4h13:18 java -Dcom.sun.ma
 1479 jerry      20   0 3576M  595M 18268 R  9.1 15.7  3h36:35 java -Dcom.sun.ma
25714 tom        20   0  129M  2360  1540 R  1.4  0.1  0:00.04 htop
 1298 groot      20   0  173M 67784 11240 S  0.7  1.7  0:04.67 splunkd -p 8089 s
 1247 groot      20   0  173M 67784 11240 S  0.7  1.7  9:11.01 splunkd -p 8089 s

top为什么和中的各个流程线htop报告的利用率远高于 中的 CPU 可视化htop

我早些时候开始调查这篇关于 CPU 利用率的帖子,这似乎重申了我之前的理解:CPU 利用率是<process_clock>/<wall_clock>。我知道我们可以隐藏和显示 中的内核和用户条目htop,但我希望这能回答为什么可视化的利用率比下面列表中的进程条目的总和更高,而不是相反。

提前致谢!

编辑:

  • 操作系统:CentOS 7
  • 服务器:AWS t2.medium 实例

我还阅读了有关 AWS 上 XEN 虚拟机管理程序中 CPU 被盗的信息这里,建议使用 CloudWatch 是出于扩展原因实际了解资源使用情况的更有效方法;但是,我仍然很好奇为什么htop会报告给定进程的过多 CPU 消耗,因为此链接表明我应该看到我无法使进程的 CPU% 总和超过一定数量,而不是我应该看到这篇文章中描述的差异。

相关内容