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

标签 linux bash centos sh cpu-usage

我想编写一个 shell 脚本来读取每个核心的当前 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

关于linux - Linux 中是否可以通过/sys 获取特定核心的当前 CPU 利用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58257596/

相关文章:

linux - 检查主板/BIOS/UEFI和CPU是否支持VT-D/IOMMU

parsing - Bash:将文本文件拆分为以非字母数字字符作为分隔符的单词

当脚本从函数中获取时 Bash shell 变量丢失

bash - 如何删除 "find"命令的所有结果

python - 2003, "Can' t 连接到 '192.168.1.xxx' (10060) 上的 MySQL 服务器

linux - 重新协商速率限制

c++ - 多连接客户端套接字应用程序C++

mysql - Centos 6 64位启用my.cnf

CentOS 6.x (6.10) 到 CentOS 7.x

python - 如何在并行运行所有脚本时运行特定命令