¿Cómo obtener el porcentaje de CPU y el uso de memoria en una sola línea?

5

¿Cómo puedo obtener el porcentaje de uso de CPU y el porcentaje de RAM impresos en una línea en Linux? (Usando cli)

Tengo que pasar estas cadenas de salida a una pantalla LCD.

Muchas gracias

Amedeo Baragiola
fuente

Respuestas:

3

Use AWK para analizar la salida desde arriba

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

Esto usará el modo por lotes de top para imprimir estadísticas una vez, que luego puede analizar de la forma que desee con awk. Por ejemplo, el código anterior arrojó esto en mi prueba:

Memoria en uso: 93.866%, CPU en uso: 1.7%

Obviamente, su salida variará. También puede ajustar el formato de salida si necesita más (o menos) información.

CodeGnome
fuente
2

Puede analizar la salida de algunas de las utilidades de Unix, como 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

Lo anterior imprime la memoria libre y el uso de la CPU.

Si desea usar memoria, puede usar otra utilidad, como topen modo por lotes, como lo sugirió CodeGnome y yo en una respuesta anterior .

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

O para obtener porcentajes , puedes hacer

$ 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

Sin embargo, estoy seguro de que hay soluciones más elegantes.

Lev Levitsky
fuente
El OP solicitó porcentajes .
terdon
@terdon Tienes razón, gracias, estaba mirando el título. Actualizado
Lev Levitsky