如何在单行上获取 CPU 百分比和内存使用情况?

如何在单行上获取 CPU 百分比和内存使用情况?

如何在 Linux 上获取一行中打印出来的 CPU 使用率和 RAM 百分比?(使用 cli)

我必须将这些输出字符串传递到 LCD 显示器。

多谢

答案1

使用 AWK 解析 Top 的输出

top -bn1 | awk '/Mem/ { mem = "Memory in Use: " $5 / $3 * 100 "%" };
                /Cpu/ { cpu = "CPU in Use: " 100 - $8 "%" };
                END   { print mem ", " cpu }'

这将使用 top 的批处理模式打印一次统计信息,然后您可以使用 awk 以任何您喜欢的方式解析它。例如,上面的代码在我的测试中产生了以下内容:

内存使用率:93.866%,CPU 使用率:1.7%

显然,您的输出会有所不同。如果您需要更多(或更少)信息,您还可以调整输出格式。

答案2

您可以解析某些 Unix 实用程序的输出,例如vmstat

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  75812 282632 115704 891332    0    1    22    54  138  362 15  2 80  2
$ vmstat | sed -n '3s/ \+/\t/gp' | cut -f5,14
280904  15

上面打印了可用内存和 CPU 使用率。

如果你想用过的内存,您可以使用另一个实用程序,例如top批处理模式,正如 CodeGnome 和我所建议的那样先前的答案

$ top -bn1 | sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/.*,  ([0-9]+) .*/\1/p' | tr '\n' ' '
10.4 3787340

或者获取百分比, 你可以做

$ top -bn1 | \
> sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/[^0-9]*([0-9]+)[^0-9]+([0-9]+) .*/\1 \2/p' | \
> { read cpu; read tot used; echo $cpu $(( 100*used/tot )); }
10.3 94

但我确信还有更优雅的解决方案。

相关内容