CPU 的使用率(top 的输出)总和怎么会超过 100%?
How can the CPU usage (output of top) be more than 100% in sum?
我正在编写一些 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 的输出中,而 parent 进程还显示了 child 的 cpu 用法? ==> child 被计算了两次?
a 100% cpu 是 1 CPU/CORE/Thread 的充分利用。如果有,8 CPU,则最大值为 800%。
如果您有线程,情况会稍微复杂一些,因为线程不是真正的 CPU,但是,在 Linux 上,它被算作 CPU。
根据我的经验,我有一个过大的 SQL 数据库导致了问题。这是因为它导致 mysqld(mysql 守护程序)以超过系统内存的容量执行,导致服务器崩溃。当我在 UNIX 中尝试 'top' 命令时,系统显示进程使用了超过 100% 的内存。因此进程可以使用超过 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 的输出中,而 parent 进程还显示了 child 的 cpu 用法? ==> child 被计算了两次?
a 100% cpu 是 1 CPU/CORE/Thread 的充分利用。如果有,8 CPU,则最大值为 800%。
如果您有线程,情况会稍微复杂一些,因为线程不是真正的 CPU,但是,在 Linux 上,它被算作 CPU。
根据我的经验,我有一个过大的 SQL 数据库导致了问题。这是因为它导致 mysqld(mysql 守护程序)以超过系统内存的容量执行,导致服务器崩溃。当我在 UNIX 中尝试 'top' 命令时,系统显示进程使用了超过 100% 的内存。因此进程可以使用超过 100% 的系统内存。