¿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
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.
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 top
en 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.