如何在终端(Mac)中获取CPU利用率(%)

26

我在 Linux 和 Windows 上看到了同样的问题,但没有 Mac(终端)。有人可以告诉我如何以百分比的形式获取当前处理器利用率,例如输出示例40%。谢谢


6
这是针对Mac操作系统的命令:ps -e -o %cpu | awk '{s+=$1} END {print s}',它可以计算CPU的总占用率。 - vcsjones
谢谢,这正是我想要的,现在只需要添加百分号(%)即可!谢谢。 - cyw
1
@vcsjones,请将此作为答案发布,以便 OP 可以接受它。 - Sega-Zero
为什么不启动活动监视器? - inorganik
7个回答

51

这在 Mac 上有效(包括“%”符号):

ps -A -o %cpu | awk '{s+=$1} END {print s "%"}'

简单解释一下:

ps 是进程状态工具,大多数类Unix操作系统都支持它。我们要传递给它一些标志:

  • -A 表示所有进程,而不仅仅是您运行的进程。
  • -o 允许我们指定输出格式。在这种情况下,我们只需要 ps 输出的cpu%列。

这将为我们获取所有进程的CPU使用情况列表,如下所示:

0.0
1.3
27.0
0.0

现在我们需要将这个列表加起来得到一个最终数字,因此我们将 ps 的输出传输到 awk 中。awk 是一个非常强大的用于解析和操作文本的工具。我们只需要简单地将这些数字加起来,然后打印出结果,并在末尾添加“%”即可。


4
这种方法并不是非常准确,因为这些值被四舍五入了。实际的 CPU 使用率可能要高得多或低得多,可以通过活动监视器来检查。 - VitorMM
2
我正在使用这个命令在Mac上获取% CPU使用率,但是我得到了一些大于100的百分比值。有任何想法为什么会出现这种情况? - Questionnaire
这非常有帮助,因为它可以在恢复模式终端中运行。谢谢。 @问卷调查 您可能会看到>100%,因为您拥有多个核心。或者由于舍入问题。 - chmac
还可以通过SSH在远程机器上进行检查!@问卷调查:chmac是正确的;如果您在活动监视器中对进程的CPU利用率求和,您将看到相同的情况;最大利用率=(#核心* 100%)。 - Attila the Fun
这个不能算是一个有效的答案——与使用top -l或从macOS活动监视器报告的方法相比,CPU使用率的测量非常不准确。 - undefined

8

在@Jon R.和@Rounak D之前的答案基础上,以下代码行将打印用户和系统值的总和,并添加了百分比。我已经测试过这个值,喜欢它大致与macOS Activity Monitor中显示的百分比相符。

top -l  2 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }'

您可以在脚本中使用以下方法将其值捕获到变量中:
cpu_percent=$(top -l  2 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }')

提示:您可能还会对 uptime 命令的输出感兴趣,该命令可以显示系统的负载情况。


7

将所有 CPU 使用率加起来,可能会得到一个大于 100% 的数字(可能是多个内核)。

这里有一个更简单的方法,但它也存在一些问题:

top -l 2 | grep -E "^CPU"

这里提供了2个样本,第一个是无意义的(因为它在样本之间计算CPU负载)。

另外,你需要使用像(\d+\.\d*)%这样的正则表达式或某些字符串函数来提取值,并添加“用户”和“系统”值以获得总值。

(来源:如何从命令行获取MAC中的CPU利用率,RAM利用率


4
在 @Jon R 的答案的基础上,我们可以通过一些简单的模式匹配来获取用户 CPU 利用率。
top -l 1 | grep -E "^CPU" | grep -Eo '[^[:space:]]+%' | head -1

如果您也想要去掉最后一个%符号,

top -l 1 | grep -E "^CPU" | grep -Eo '[^[:space:]]+%' | head -1 | sed s/\%/\/

0

你可以做到这一点。

printf "$(ps axo %cpu | awk '{ sum+=$1 } END { printf "%.1f\n", sum }' | tail -n 1),"

0
top -F -R -o cpu

-F 不计算共享库(也称为框架)的统计信息。

-R 不遍历并报告每个进程的内存对象映射。

-o cpu 按 CPU 使用率排序

答案来源


0

这只生成统计数据,跳过额外的工作:

top -R -F -n 0

要查找CPU利用率,请按照Michael Behrens所示进行解析:

top -R -F -n 0 -l 2 -s 0 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }'

使用额外的-s 0参数可以使第二个打印输出没有延迟(默认为1秒)。Jon R已经很好地解释了为什么一个样本不足以说明问题:它只显示了未指定时间段内的平均CPU使用率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接