我正在编写一些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使用情况? ==>孩子被计算两次?
答案 0 :(得分:8)
100%cpu是1 CPU / CORE / Thread的完全利用率。如果你有8个CPU,那么最大值将是800%。
如果你有线程,故事有点复杂,因为一个线程不是真正的CPU,但是在Linux上它被算作CPU。
答案 1 :(得分:3)
根据我的经验,我有一个超大的SQL数据库导致了问题。这是因为它导致mysqld(mysql守护进程)以超过系统内存容量的速度执行,导致服务器崩溃。当我尝试顶级'在UNIX中,系统显示该进程使用了超过100%的内存。因此,进程可以利用超过100%的系统内存。