Comando para mostrar el uso de la memoria, el uso del disco y la carga de la CPU

16

Quiero mostrar el uso de la memoria, el uso del disco y la carga de la CPU en el siguiente formato:

Memory Usage: 33/512MB (6%)    
Disk usage: 4.2/20GB (23%) 
CPU Load: 0.01

¿Cómo puedo hacer eso?

Prem
fuente
Se parece mucho a la tarea. Tome los datos que necesita de / proc o de otros comandos y luego formatee con awk, perl o simplemente bash.
mikebabcock
¡Bienvenido a Unix & Linux Stack Exchange! Por favor, siempre incluya su sistema operativo. Las soluciones a menudo dependen del sistema operativo utilizado. ¿Estás utilizando Unix, Linux, BSD, OSX, algo más? ¿Cual version?
terdon
Gracias, chicos, por su ayuda. Sin embargo, obtuve mi respuesta aquí stackoverflow.com/questions/33774260/…
Mohsin Inayat Khan

Respuestas:

33

Prueba esto, funciona en mi sistema Debian. Los detalles pueden variar según la implementación de estas herramientas que utiliza su sistema operativo:

#!/bin/sh
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 

Si guarda lo anterior como un script y lo ejecuta, obtendrá (ejemplo de mi sistema):

$ ./foo.sh 
Memory Usage: 4986/7994MB (62.37%)
Disk Usage: 23/68GB (35%)
CPU Load: 0.78

Tenga en cuenta que la secuencia de comandos anterior proporciona el uso del disco para la /partición. No especificaste lo que querías, así que supongo que eso es lo que buscas.

terdon
fuente
1
Lo intenté solo con awk github.com/rahulinux/scripts/blob/master/sys_info.sh
Rahul Patil
@RahulPatil se ve bien, ¿por qué no lo publicas?
terdon
3
porque es solo tu copia ans. : D
Rahul Patil
1
la línea free -m me da un error, el porcentaje no se escapó correctamente. así es como debe ser:free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
Simon
1
@ user1735921 Haga una pregunta . Pero primero, busque en Google cómo almacenar la salida de un comando en una variable, eso es trivial. Luego, explique lo que desea almacenar y lo que desea probar en la pregunta.
terdon
5

Comprueba en la cima .

Lea esto, https://lwn.net/Articles/387202/

Ver, ingrese la descripción de la imagen aquí

Puede ver la carga de disco / memoria / cpu por aplicaciones:

ingrese la descripción de la imagen aquí

Por ejemplo, uso del disco:

ingrese la descripción de la imagen aquí

encima de las estadísticas recopiladas en el directorio /var/log/atop/en archivos de formato binario por días. Puede leer una página de manual, debe haber una forma de extraer información útil.

user2496
fuente
2

No hay un comando para mostrar exactamente en su formato particular, pero los siguientes proporcionan algunos de los valores base, sobre los cuales se podría construir un script, como alternativa también es posible leer valores de / proc y / sys.

free - vista rápida

vmstat 1 muestra las estadísticas de E / S de rendimiento del sistema

top dinámica

htop similar a la parte superior

X Tian
fuente
1
Agregue mi favorito personal, iostat.
mikebabcock
0

Creo que necesita ayuda de nagios, ya que todos estos complementos / srcipts para nagios ya están hechos y puede descargar y probar sin la instalación de nagios.

empleado
fuente
0

Si está utilizando Solaris, consulte esto: showcpucount

Esto le dará una idea de cómo escribir su código.

vikkp
fuente
Blog ya no existe.
Jay Elston
0

Aquí está mi código para obtener el uso de CPU y RAM:

### 1. get total average CPU usage for the past minute
avg_cpu_use=$(uptime)
# a. split response
IFS=',' read -ra avg_cpu_use_arr <<< "$avg_cpu_use"
# b. find cpu usage
avg_cpu_use=""
for i in "${avg_cpu_use_arr[@]}"; do :
    if [[ $i == *"load average"* ]]; then
        avg_cpu_use=$i
        break       
    fi
done
# c. create response
avg_cpu_use=$(echo ${avg_cpu_use:16})   # Remove "  load average: "
if [[ -z "${avg_cpu_use// }" ]]; then
    avg_cpu_use="CPU: N/A%%"
    exit -1
else
    avg_cpu_use="CPU: ${avg_cpu_use}%%"
fi

### 2. get RAM usage
ram_use=$(free -m)
# a. split response by new lines
IFS=$'\n' read -rd '' -a ram_use_arr <<< "$ram_use"
# b. remove extra spaces
ram_use="${ram_use_arr[1]}"
ram_use=$(echo "$ram_use" | tr -s " ")
# c. split response by spaces
IFS=' ' read -ra ram_use_arr <<< "$ram_use"
# d. get variables
total_ram="${ram_use_arr[1]}"
ram_use="${ram_use_arr[2]}"
# e. create response
ram_use="RAM: ${ram_use}/${total_ram} MB"

echo $avg_cpu_use
echo $ram_use
xinthose
fuente
-2

Debe poder mostrar el uso de la memoria, el uso del disco y la carga de la CPU utilizando:

(ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2)
Abhijeet Petkar
fuente