Linux 上有一个 procs_running 值/proc/stat
,它显示正在运行的进程(线程)数量。
问题是:这个值是否包括当前正在查询 procfs 的进程?
在绝对空闲的系统上,我们应该期望该值为 0 还是 1 ?
答案1
procs_running
in 中的字段是否/proc/stat
包含正在查询 procfs 的当前进程?
是的,它确实。伪/proc/stat
文件生成于fs/proc/stat.c
在 Linux 内核中,通过调用nr_running()
.
该nr_running()
函数定义在kernel/sched/core.c
,它只是对所有每个 cpu 进程计数器进行求和。当前进程在这里没有以任何特殊方式处理,因此它包含在计数中。
在绝对空闲的系统上,我们应该期望值是 0 还是 1 ?
既然一个过程必须读取伪文件以供内核生成内容,并且这样的过程总是由nr_running()
内核函数计数,我们应该始终期望它至少为 1。
答案2
经过一些测试,看起来这包括执行请求的过程。因此,vmstat 可能会从活动进程数中减去 1 以显示真实的系统负载