对 cat /proc/stat 的输出感到困惑

对 cat /proc/stat 的输出感到困惑

我在运行 Centos 6.10 的大学服务器上。我正在尝试计算系统处于空闲任务状态的时间。我正在查看 /proc/stat 伪文件。根据手册页,第一行的第四列应该是系统在百分之一秒内空闲的时间。

我遇到的问题是这个值非常大。当我将其除以 100 以获得秒数,然后将该结果除以 60^2*24(一天中的秒数)以获得天数时,得到的答案比系统的正常运行时间更长。

简而言之,这个值(我计算它的方式)告诉我系统空闲的时间比启动的时间长。

答案1

它是所有 cpu 上空闲时间的总和。

第一cpu行 后面/proc/stat跟着cpu0cpu1每个行都类似在线的中央处理器。这在较新版本的proc(5)联机帮助页。

/proc/uptime请注意,并非所有 cpu 都可能在线,但会为所有 CPU 计算第一个/系统条目中的空闲值(相当于第二个字段中的秒数)可能的中央处理器[1]。

所以你可以将它除以cpu数量得到某物就像平均值一样。

获取当前、可能、开启和离线 cpu 数量的一种方法是查看文件/sys/devices/system/cpu/目录。


[1] 你可以看看fs/proc/stat.c在来源中:

static int show_stat(struct seq_file *p, void *v)
{
        ...
        for_each_possible_cpu(i) {
                ...
                idle += get_idle_time(kcs, i);
        ...
        seq_put_decimal_ull(p, "cpu  ", nsec_to_clock_t(user));
        ...
        seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));
        ...
        for_each_online_cpu(i) {
                ...
                seq_printf(p, "cpu%d", i);
                ...
                idle = get_idle_time(kcs, i);
                ...
                seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));

相关内容