如何获取 Linux 上的总体 CPU 使用率(例如 57%)

如何获取 Linux 上的总体 CPU 使用率(例如 57%)

例如,我想知道如何使用 bash 获取系统 CPU 使用率并以百分比形式呈现。

示例输出:

57%

如果有多个核心,如果能够计算出平均百分比就好了。

答案1

这样做是为了查看总体CPU使用率。这个调用python3并使用跨平台psutil模块

printf "%b" "import psutil\nprint('{}%'.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\nprint('{}%'.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 1-liner 中:

printf "%b" "import psutil\n\
cpu_percent_cores = psutil.cpu_percent(interval=2, percpu=True)\n\
avg = sum(cpu_percent_cores)/len(cpu_percent_cores)\n\
cpu_percent_total_str = ('%.2f' % avg) + '%'\n\
cpu_percent_cores_str = [('%.2f' % x) + '%' for x in cpu_percent_cores]\n\
print('Total: {}'.format(cpu_percent_total_str))\n\
print('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%

为了有关psutil.cpu_percent(interval=2)python 调用如何工作的更多信息,参见官方psutil.cpu_percent(interval=None, percpu=False)文档在这里

psutil.cpu_percent(interval=None, percpu=False)

返回一个浮点数,以百分比形式表示当前系统范围的 CPU 利用率。当时间间隔 > 时,0.0比较时间间隔前后经过的系统 CPU 时间(阻塞)。当interval是0.0None比较自上次调用或模块导入以来经过的系统CPU时间时,立即返回。这意味着第一次调用它时,它将返回一个无意义的0.0值,您应该忽略它。在这种情况下,为了准确性,建议在0.1调用之间至少间隔几秒来调用此函数。当 percpu 为 True 时,返回一个浮点数列表,表示每个 CPU 的利用率百分比。列表的第一个元素指第一个 CPU,第二个元素指第二个 CPU,依此类推。列表的顺序在调用之间是一致的。

警告:第一次调用此函数时要使用 interval = 0.0,否则None它将返回一个0.0您应该忽略的无意义的值。

参考:

  1. Stack Overflow:如何在 Python 中获取当前 CPU 和 RAM 使用情况?
  2. Stack Overflow:在一行命令行中执行多行语句?
  3. https://stackoverflow.com/questions/6149006/how-to-display-a-float-with-two-decimal-places
  4. https://stackoverflow.com/questions/9039961/finding-the-average-of-a-list/9040000#9040000

相关内容