【问题标题】:How can the CPU usage (output of top) be more than 100% in sum?CPU使用率(top的输出)如何总和超过100%?
【发布时间】:2015-04-06 18:25:52
【问题描述】:

我正在编写一个小 Python 脚本来测试一些东西。后来我想用它来用gnuplot创建资源使用图,但首先要进行一些测试。

脚本看起来像

import subprocess

result = subprocess.check_output("top -b -n 1 -c", shell=True).split("\n")

head = result[:5]
body = [x for x in result[7:] if x] #removes empty strings

for line in head:
    print line

csum = 0.0
for line in body:
    print line
    csum += float(line.split()[8])

print "CPU usage of all processes added up", csum, "%"

多次运行它几乎总是导致显示的 CPU 使用率 > 100%。有时甚至 > 200%。这怎么可能?

它在具有两个内核的虚拟机(virtualbox,ubuntu 14.04 64 位)中运行。主机也有两个核心。

所有正在运行的进程的使用值之和不应该总是低于100%吗?我正在同时运行 htop,这显示每个内核上大约有 50% 的负载....

问题可能是某些进程启动了其他进程并且两者都显示在 top 的输出中,而父进程还显示了子进程的 cpu 使用情况? ==> 孩子被计算两次?

【问题讨论】:

  • 通常这种用法意味着 1 个核心 100%;如果你有 2 个核心,它应该会上升到 200%。如果您有更多,可能是由于四舍五入或采样伪影所致。
  • 好的,谢谢。因此,如果我想查看“真实”使用情况,将总和除以核心数应该是正确的

标签: python linux ubuntu cpu


【解决方案1】:

100% cpu 是 1 个 CPU/CORE/Thread 的充分利用。如果你有 8 个 CPU,那么最大值将是 800%。

如果你有线程,情况就有点复杂了,因为线程不是真正的 CPU,但在 Linux 上它被算作一个 CPU。

【讨论】:

  • 将每个 CPU 显示为 100% 在 top 中称为“IRIX mode”。可以禁用它以将 8 个 CPU 中的每一个显示为 12.5%
  • 好的...很高兴知道 :) 现在我明白了。
  • 有没有更好的方法来找出几个特定进程的 CPU 使用率?我的意思是除了解析 top 的输出
  • 是的,有。你可以使用 top -p {你要监控的进程id}
【解决方案2】:

根据我的经验,我有一个导致问题的超大 SQL 数据库。这是因为它导致 mysqld(mysql 守护进程)以超出系统内存容量的方式执行,从而导致服务器崩溃。当我在 UNIX 中尝试“top”命令时,系统显示该进程正在使用超过 100% 的内存。因此进程可以使用超过 100% 的系统内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多