如何将CPU使用率(top的输出)总和超过100%?

时间:2015-04-06 18:25:53

标签: python linux ubuntu cpu

我正在编写一些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使用情况? ==>孩子被计算两次?

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

根据我的经验,我有一个超大的SQL数据库导致了问题。这是因为它导致mysqld(mysql守护进程)以超过系统内存容量的速度执行,导致服务器崩溃。当我尝试顶级'在UNIX中,系统显示该进程使用了​​超过100%的内存。因此,进程可以利用超过100%的系统内存。