CPU使用率(顶部的输出)加起来怎么能超过100%



我正在写一个小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使用情况吗?===>孩子被数了两次?

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

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

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

最新更新