Necesito obtener un porcentaje de uso de memoria de vmstat, pero no entiendo bien algunos de los números relacionados con la memoria que se muestran en vmstat.
En particular, dado un resultado como este
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 139728 45396 199128 1236360 1 2 4 622 3 1 51 4 43 2 0
¿Cuál es la cantidad de memoria total del sistema? ¿Es 'swpd' + 'gratis' + 'buff' + 'cache', que suman 1620612?
¿Cuál es la cantidad de memoria libre del sistema? ¿Es 45396, como se muestra en la columna "gratis"?
El problema es que no cuadran ni se acercan a lo que informó 'top'. El resultado de 'top' que tomé casi al mismo tiempo que el de 'vmstat' anterior es:
[...]
Mem: 4059616k total, 3965504k used, 94112k free, 200020k buffers
[...]
Entonces... ¿Supongo que debe haber números/opciones ocultos en 'vmstat' que no conocía?
Necesito usar 'vmstat' para este propósito y no otros comandos, ya que esto es lo que establece el requisito.
Idealmente, lo que quiero lograr con 'vmstat' es el porcentaje de uso de memoria, como en:
<used_memory>/<total_memory> * 100%.
¡Gracias!
Respuesta1
Lo que estás buscando es el resultado de "gratis":
$ free
total used free shared buffers cached
Mem: 775556 759456 16100 0 22132 592484
-/+ buffers/cache: 144840 630716
Swap: 500344 21972 478372
Aquí tienes un recorrido:
Esta es una caja con 768 MB de RAM física y una partición de intercambio de 500344 KB.
759456 KB están "usados" (segunda columna, fila superior). De esta memoria "usada", 23132 KB son búfer (quinta columna, fila superior) y 592484 KB (sexta columna, fila superior) son caché, lo que deja 144840 KB (segunda columna, 2 fila) de memoria física que están utilizando los procesos activos.
Cuando se considera que la memoria utilizada por los buffers y el caché podría usarse para procesos, eso deja 630716 KB (3.ª columna, 2.ª fila) de memoria física libre.
La partición de intercambio, como dije, es de 500344 KB (primera columna, fila inferior). 21972 KB (segunda columna, fila inferior) del archivo de intercambio están en uso, lo que deja 478372 KB (tercera columna, fila inferior) libres.
Por lo tanto, su definición de % de memoria libre depende de si está contando buffers y caché o no, y de si está contando el intercambio o no.
Eso debería darle suficiente para calcular un porcentaje como mejor le parezca.
Aquí está el resultado de top y free:
$ top -n1 | grep "used," ; free
Mem: 775556k total, 751472k used, 24084k free, 20776k buffers
Swap: 500344k total, 21972k used, 478372k free, 586648k cached
total used free shared buffers cached
Mem: 775556 751344 24212 0 20776 586648
-/+ buffers/cache: 143920 631636
Swap: 500344 21972 478372
Puede ver cómo coinciden los programas top y free (aunque con una pequeña diferencia: esta es una máquina multiusuario y el uso de memoria de los programas top y free se refleja allí).
Agregue una "-s" cuando llame a vmstate y verá prácticamente el mismo resultado, solo que en una forma diferente:
$ vmstat -s ; free
775556 total memory
759920 used memory
674680 active memory
18440 inactive memory
15636 free memory
21892 buffer memory
594372 swap cache
500344 total swap
21972 used swap
478372 free swap
... output truncated ...
total used free shared buffers cached
Mem: 775556 759920 15636 0 21892 594372
-/+ buffers/cache: 143656 631900
Swap: 500344 21972 478372
Puede ver que vmstat muestra los mismos números que gratis.
Respuesta2
Tengo la misma pregunta contigo y se me ocurrió una fórmula.
vmstat -s | awk ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'
Lo probé en la versión vmstat de procps-ng 3.3.10 y vmstat de procps-ng 3.3.9.
Respuesta3
Le recomendaría que lea este Redbook de IBM "Pautas de ajuste y rendimiento de Linux" (http://www.redbooks.ibm.com/abstracts/redp4285.html?Abierto). Tiene detalles sobre los datos devueltos por numerosos comandos y debería ayudarle.
Normalmente he usado el comando "gratuito" en Linux o "cat /proc/meminfo".
Respuesta4
Aquí está unPOSIXfunción de shell que redondea el porcentaje deseado al entero más cercano (para propósitos de secuencias de comandos, esto puede ser más útil, ya quePOSIXLas pruebas de comparación aritmética de Shell solo funcionan con números enteros):
# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp
Salida (en mi sistema):
12
Lo mismo, con free
:
furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }