是否可以通过 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
我想编写一个 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