/proc/stat 显示 user、nice、sys、idle、iowait、irq 和 sirq 的刻度,如下所示:
cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0
如何使用这些值计算用户、nice 等的个人利用率(以 % 为单位)?就像“top”或“vmstat”中显示的值一样。
此代码计算分布在所有内核上的用户利用率。
import os
import time
import multiprocessing
def main():
jiffy = os.sysconf(os.sysconf_names['SC_CLK_TCK'])
num_cpu = multiprocessing.cpu_count()
stat_fd = open('/proc/stat')
stat_buf = stat_fd.readlines()[0].split()
user, nice, sys, idle, iowait, irq, sirq = ( float(stat_buf[1]), float(stat_buf[2]),
float(stat_buf[3]), float(stat_buf[4]),
float(stat_buf[5]), float(stat_buf[6]),
float(stat_buf[7]) )
stat_fd.close()
time.sleep(1)
stat_fd = open('/proc/stat')
stat_buf = stat_fd.readlines()[0].split()
user_n, nice_n, sys_n, idle_n, iowait_n, irq_n, sirq_n = ( float(stat_buf[1]), float(stat_buf[2]),.
float(stat_buf[3]), float(stat_buf[4]),
float(stat_buf[5]), float(stat_buf[6]),
float(stat_buf[7]) )
stat_fd.close()
print ((user_n - user) * 100 / jiffy) / num_cpu
if __name__ == '__main__':
main()
来自Documentation/filesystems/proc.txt
:
(...) 这些数字标识 CPU 用于执行不同类型工作的时间量。时间单位为 USER_HZ(通常为百分之一秒)。
因此,要根据百分比计算利用率,您需要:
USER_HZ
机器上有什么第二个很简单:btime
在同一个文件中有一行可以用于此目的。对于USER_HZ
,请查看如何获取每瞬间的毫秒数。