如何获取 Linux 上的整体 CPU 使用率(例如 57%)[关闭]
- 2024-10-09 09:10:00
- admin 原创
- 89
问题描述:
我想知道如何获取系统 CPU 使用率并以百分比形式使用 bash 来显示。
示例输出:
57%
如果有多个核心,那么可以计算出平均百分比就更好了。
解决方案 1:
看看cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
编辑请在复制粘贴或将其用于任何严肃工作之前阅读评论。这没有经过测试或使用,它适合那些不想安装实用程序或希望在任何发行版中都能正常工作的人。有些人认为你可以“apt-get install”任何东西。
注意:这不是当前CPU 使用率,而是自系统启动以来所有核心的总体 CPU 使用率。这可能与当前 CPU 使用率有很大不同。要获取当前值,必须使用 top(或类似工具)。
当前 CPU 使用率可以通过以下方式计算:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' \n<(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)
解决方案 2:
您可以尝试:
top -bn1 | grep "Cpu(s)" | \n sed "s/.*, *([0-9.]*)%* id.*//" | \n awk '{print 100 - $1"%"}'
解决方案 3:
mpstat
从sysstat
包装中试用
> sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025) 02/10/2012 _x86_64_ (2 CPU)
03:33:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:33:26 PM all 2.39 0.04 0.19 0.34 0.00 0.01 0.00 0.00 97.03
然后一些cut
或grep
解析您需要的信息:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a
解决方案 4:
不妨用我的解决方案提出一个实际的回应,该解决方案受到 Peter Liljenberg 的启发:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
这将用于awk
打印出 100 减去第 12 个字段(空闲),并在其后带有百分号。awk
仅对第 12 个字段仅包含数字和点的行执行此操作($12 ~ /[0-9]+/
)。
您还可以计算间隔一秒的五个样本的平均值:
$ mpstat 1 5 | awk 'END{print 100-$NF"%"}'
像这样测试一下:
$ mpstat 1 5 | tee /dev/tty | awk 'END{print 100-$NF"%"}'
解决方案 5:
编辑:我注意到在另一个用户的回复中,%idle 是字段 12 而不是字段 11。awk 已更新,以解释 %idle 字段是变量的情况。
这应该会得到你想要的输出:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'
如果想要简单的整数舍入,可以使用 printf:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'
解决方案 6:
执行此操作可查看总体 CPU 使用率。这将调用python3
并使用跨平台psutil
模块。
printf "%b" "import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
该interval=2
部分说要测量 2 秒阻塞期内的总 CPU 负载。
示例输出:
9.4%
它包含的python程序是这样的:
import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))
放在time
调用前面证明它在本例中需要大约 2 秒的指定间隔时间。以下是调用和输出:
$ time printf "%b" "import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
9.5%
real 0m2.127s
user 0m0.119s
sys 0m0.008s
要查看单个核心的输出,我们使用下面的这个 Python 程序。首先,我获取一个“每个 CPU”信息的 Python 列表(数组),然后我计算列表中所有内容的平均值,以获得“总 % CPU”类型的值。然后我打印总数和单个核心的百分比。
Python 程序:
import psutil
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)
cpu_percent_total_str = ('%.2f' % avg) + '%'
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]
print('Total: {}'.format(cpu_percent_total_str))
print('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))
如果你愿意,可以将其包装成一个非常丑陋的单行 bash 脚本,如下所示。我必须确保在 Python 程序中仅使用单引号 ( ''
),而不是双引号 ( ""
),才能使其包装成一行 bash 脚本:
printf "%b" \n"\nimport psutil
\ncpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)
\navg = sum(cpu_percent_cores)/len(cpu_percent_cores)
\ncpu_percent_total_str = ('%.2f' % avg) + '%'
\ncpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]
\nprint('Total: {}'.format(cpu_percent_total_str))
\nprint('Individual CPUs: {}'.format(' '.join(cpu_percent_cores_str)))
\n" | python3
示例输出:请注意,我有 8 个核心,因此“Individual CPUs:”后面有 8 个数字:
Total: 10.15%
Individual CPUs: 11.00% 8.50% 11.90% 8.50% 9.90% 7.60% 11.50% 12.30%
有关python 调用如何工作的更多信息psutil.cpu_percent(interval=2)
,请参阅此处的官方psutil.cpu_percent(interval=None, percpu=False)
文档:
psutil.cpu_percent(interval=None, percpu=False)
返回一个浮点数,以百分比形式表示当前系统范围的 CPU 利用率。当 interval 为 > 时,
0.0
比较间隔前后系统 CPU 的时间(阻塞)。当 interval 为0.0
或时,None
比较自上次调用或模块导入以来系统 CPU 的时间,立即返回。这意味着第一次调用它时,它将返回一个0.0
您应该忽略的无意义的值。在这种情况下,为了准确起见,建议在两次0.1
调用之间至少间隔 几秒。当 percpu 为 True 时,返回一个浮点数列表,以百分比形式表示每个 CPU 的利用率。列表的第一个元素指的是第一个 CPU,第二个元素指的是第二个 CPU,依此类推。列表的顺序在各个调用中是一致的。警告:第一次调用此函数时,请使用 interval =
0.0
否则None
它将返回一个0.0
您应该忽略的无意义的值。
进一步说:
我在我的eRCaGuy_dotfiles repo 中的cpu_logger.py脚本中使用了上述代码。
参考:
Stack Overflow:如何在 Python 中获取当前 CPU 和 RAM 使用情况?
Stack Overflow:在单行命令行中执行多行语句?
如何显示具有两位小数的浮点数?
查找列表的平均值
有关的
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件