从 /proc/stat 计算 user、nice、sys、idle、iowait、irq 和 Sirq

发布于 2024-12-03 00:48:59 字数 212 浏览 0 评论 0原文

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

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

如何计算各个利用率(在%) 对于用户来说,这些值很好等吗?就像“top”或“vmstat”中显示的值一样。

/proc/stat shows ticks for user, nice, sys, idle, iowait, irq and sirq like this:

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

How can I calculate the individual utilizations (in %) for user, nice etc with these values? Like the values that shows in 'top' or 'vmstat'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

碍人泪离人颜 2024-12-10 00:48:59

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

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()

This code calculates user utilization spread over all cores.

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()
甲如呢乙后呢 2024-12-10 00:48:59

来自Documentation/filesystems/proc.txt

(...) 这些数字标识 CPU 执行任务所花费的时间
不同种类的工作。时间单位为 USER_HZ(通常为百分之一秒)。

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

  • 找出计算机上的 USER_HZ
  • 找出系统启动以来已经过去了多长时间。

第二个很简单:同一个文件中有一个 btime 行,您可以使用它。对于 USER_HZ,请查看 如何获取每 jiffy 的毫秒数

From Documentation/filesystems/proc.txt:

(...) These numbers identify the amount of time the CPU has spent performing
different kinds of work. Time units are in USER_HZ (typically hundredths of a second).

So to figure out utilization in terms of percentages you need to:

  • Find out what USER_HZ is on the machine
  • Find out how long it's been since the system booted.

The second one is easy: there is a btime line in that same file which you can use for that. For USER_HZ, check out How to get number of mili seconds per jiffy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文