是否可以通过 Linux 中的 /sys 从特定核心获取当前 CPU 利用率?

Is it possible to get current CPU utilisation from a specific core via /sys in Linux?

我想编写一个 shellscript 来读取每个核心的当前 CPU 利用率。是否可以从 Linux (CentOS 8) 的 /sys 目录中读取它?我发现 /sys/bus/cpu/drivers/processor/cpu0 确实给了我相当多的信息(比如当前频率),但我还没有弄清楚如何阅读 CPU 利用率。

换句话说:是否有一个文件可以让我了解 Linux 中特定 CPU 核心的当前利用率,特别是 CentOS 8?

我相信您应该能够从 /proc/stat 中提取信息 - 以 cpu$N 开头的行,其中 $N 是 0、1、2,..... . 例如:

强烈建议阅读其他答案中引用的文章。

cpu0 101840 1 92875 80508446 4038 0 4562 0 0 0
cpu1 81264 0 68829 80842548 4424 0 2902 0 0 0

重复调用会显示更大的值:

cpu  183357 1 162020 161382289 8463 0 7470 0 0 0
cpu0 102003 1 93061 80523961 4038 0 4565 0 0 0
cpu1 81354 0 68958 80858328 4424 0 2905 0 0 0

注意 CPU0 第 5 列(空闲计数)从 80508446 移动到 80523961

中每一行的格式

cpuN user-time nice-time system-time idle-time io-wait ireq softirq steal guest guest_nice

所以一个基本的解决方案:

while true ;

   for each cpu
       read current counters, at least user-time system-time and idle 
       usage = current(user-time + system-time) - prev(user-time+system-time)
       idle = current(idle) - prev(idle)
       utilization = usage/(usage+idle)
       // print or whatever.
       set prev=current
done