python - 从/proc/stat 计算 user、nice、sys、idle、iowait、irq 和 sirq

标签 python c linux kernel procfs

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

CPU 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

如何使用这些值计算 user、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()

关于python - 从/proc/stat 计算 user、nice、sys、idle、iowait、irq 和 sirq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298646/

相关文章:

python - 无法推断全局函数中的类型参数

c - 为什么 'static int'在递归计算链表长度时给出不同的答案?

c++ - 部署

c - 数据库事务和线程

c - 如何在多个显示器上使用 XGetImage?

python - “wiki_render”未收到参数 : 'request' 的值

python - 比较两个列表并获得数字差异

php - 如何在php中获取 "at"shell命令输出?

python - 命令在终端或程序(Python 和 C++)中给出不同的行为

python - 使用 python 替代 awk 来代替 Linux 命令