如何获取 Linux 上的整体 CPU 使用率(例如 57%)[关闭]

2024-10-09 09:10:00
admin
原创
90
摘要:问题描述:我想知道如何获取系统 CPU 使用率并以百分比形式使用 bash 来显示。示例输出:57% 如果有多个核心,那么可以计算出平均百分比就更好了。解决方案 1:看看cat /proc/statgrep 'cpu ' /proc/stat | awk &#039...

问题描述:

我想知道如何获取系统 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:

mpstatsysstat包装中试用

> 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

然后一些cutgrep解析您需要的信息:

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脚本中使用了上述代码。

参考:

  1. Stack Overflow:如何在 Python 中获取当前 CPU 和 RAM 使用情况?

  2. Stack Overflow:在单行命令行中执行多行语句?

  3. 如何显示具有两位小数的浮点数?

  4. 查找列表的平均值

有关的

  1. https://unix.stackexchange.com/questions/295599/how-to-show-processes-that-use-more-than-30-cpu/295608#295608

  2. https://askubuntu.com/questions/22021/how-to-log-cpu-load

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用