9

/proc/stat 显示 user、nice、sys、idle、iowait、irq 和 sirq 的刻度,如下所示:

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

如何使用这些值计算用户、nice 等的个人利用率(以 % 为单位)?就像“top”或“vmstat”中显示的值一样。

4

2 回答 2

11

此代码计算分布在所有内核上的用户利用率。

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()
于 2011-09-04T12:38:35.627 回答
4

来自Documentation/filesystems/proc.txt

(...) 这些数字标识 CPU 用于执行不同类型工作的时间量。时间单位为 USER_HZ(通常为百分之一秒)。

因此,要根据百分比计算利用率,您需要:

  • 找出USER_HZ机器上有什么
  • 了解自系统启动以来已经过了多长时间。

第二个很简单:btime在同一个文件中有一行可以用于此目的。对于USER_HZ,请查看如何获取每瞬间的毫秒数

于 2011-09-04T10:56:40.893 回答