use*_*739 177 unix linux bash cpu
我想知道如何使用bash获取系统CPU使用率并以百分比形式显示它.
样本输出:
57%
Run Code Online (Sandbox Code Playgroud)
如果有一个以上的核心,如果可以计算平均百分比,那就太好了.
vim*_*ude 160
看一眼 cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
编辑请在复制粘贴之前阅读评论或将其用于任何认真的工作.这个没有经过测试也没有使用过,对于那些不想安装实用程序的人或任何在任何发行版中工作的人来说都是一个想法.有些人认为你可以"apt-get install"任何东西.
net*_*der 97
你可以试试:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Run Code Online (Sandbox Code Playgroud)
Pet*_*son 37
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
Run Code Online (Sandbox Code Playgroud)
然后一些cut
或grep
解析你需要的信息:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a
Run Code Online (Sandbox Code Playgroud)
Dan*_*ego 20
不妨用我的解决方案提出实际的回应,这是受Peter Liljenberg的启发:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
Run Code Online (Sandbox Code Playgroud)
这将用于awk
打印100减去第12个字段(空闲),后面有一个百分号.awk
只会对第12个字段只有数字和点($12 ~ /[0-9]+/
)的行执行此操作.
jor*_*anm 14
编辑:我注意到在另一个用户的回复中,%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 }'
Run Code Online (Sandbox Code Playgroud)
如果你想要一个简单的整数舍入,你可以使用printf:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'
Run Code Online (Sandbox Code Playgroud)
Gab*_*les 14
执行此操作可查看总体 CPU 使用情况。这调用python3
并使用跨平台psutil
模块。
printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
Run Code Online (Sandbox Code Playgroud)
该interval=2
部分表示要测量 2 秒阻塞时间内的总 CPU 负载。
示例输出:
9.4%
Run Code Online (Sandbox Code Playgroud)
它包含的python程序是这样的:
9.4%
Run Code Online (Sandbox Code Playgroud)
放在time
调用前面证明在这种情况下需要大约 2 秒的指定间隔时间。这是调用和输出:
import psutil
print('{}%'.format(psutil.cpu_percent(interval=2)))
Run Code Online (Sandbox Code Playgroud)
要查看各个内核的输出,让我们使用下面的 python 程序。首先,我获得“每个 CPU”信息的 python 列表(数组),然后对该列表中的所有内容进行平均以获得“总 % CPU”类型值。然后我打印总数和单个核心百分比。
Python程序:
$ time printf "%b" "import psutil\nprint('{}%'.format(psutil.cpu_percent(interval=2)))" | python3
9.5%
real 0m2.127s
user 0m0.119s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将其包装成一个极其丑陋的单行 bash 脚本,如下所示。我必须确保在 Python 程序中仅使用单引号 ( ''
),而不是双引号 ( ""
),以便将其包装到 bash 1-liner 中:
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)))
Run Code Online (Sandbox Code Playgroud)
示例输出:请注意,我有 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%
Run Code Online (Sandbox Code Playgroud)
有关python 调用如何工作的更多信息psutil.cpu_percent(interval=2)
,请参阅此处的官方psutil.cpu_percent(interval=None, percpu=False)
文档:
psutil.cpu_percent(interval=None, percpu=False)
返回一个浮点数,以百分比形式表示当前系统范围的 CPU 利用率。当时间间隔 > 时,
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存储库的cpu_logger.py脚本中使用上述代码。
归档时间: |
|
查看次数: |
395692 次 |
最近记录: |