从/ proc / stat计算用户,nice,sys,idle,iowait,irq和sirq

时间:2011-09-04 10:41:43

标签: python c linux kernel procfs

/ proc / stat显示用户,nice,sys,idle,iowait,irq和sirq的滴答:

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

如何使用这些值计算用户的个人利用率(以%表示),等等?就像'top'或'vmstat'中显示的值一样。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:4)

来自Documentation/filesystems/proc.txt

  

(...)这些数字表示CPU执行的时间   不同种类的工作。时间单位是USER_HZ(通常是百分之一秒)。

所以要根据你需要的百分比来计算利用率:

  • 找出机器上的USER_HZ
  • 了解自系统启动以来的时间。

第二个很简单:同一个文件中有一个btime行,您可以使用它。对于USER_HZ,请查看How to get number of mili seconds per jiffy