¿Cuál es la diferencia entre el informe de uso de memoria en System Monitor y el de forma gratuita?

14

Estoy usando System Monitor 2.28.0. Cuando miro en la pestaña Recursos, veo un buen gráfico con memoria e intercambio. La memoria es aproximadamente 60% 2.3 GiB de 3.8. Cuando escribo el comando gratis, obtuve:

             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

gato / proc / meminfo | grep MemFree dar

MemFree:           34536 kB

La situación ha permanecido salvada durante varios minutos. Comencé mucho proceso con un script y el script está esperando que la memoria libre disminuya. De acuerdo con lo que estoy viendo en la pestaña Proceso (o con la parte superior), el número en System Monitor parece estar muy cerrado al total de la memoria del proceso que el que informó de forma gratuita.

Gracias

Guillaume Coté
fuente

Respuestas:

15

La diferencia es si los "búferes" y la memoria "en caché" se incluyen o no en el recuento "usado".

En general, el núcleo usa la memoria del sistema Linux para dos propósitos: procesos y archivos / caché / buffers de red. Si observa detenidamente la salida de free, ya se muestra:


             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

Si agrega "buffers" y "cache", y luego resta eso de la columna "used", obtendrá la segunda línea debajo de "used" (la línea que comienza con -/+ buffers/cache), que muestra aproximadamente 2.3G (2384512) en use, que coincide con la memoria informada en uso que informa System Monitor (está ignorando los búferes / en caché porque esos desaparecerán para dejar espacio para más procesos).

Su grep contra /proc/meminforealmente coincide con la columna "libre" de la primera línea (32512 está lo suficientemente cerca de 34536, probablemente cambió entre las dos salidas de comando).

Kees Cook
fuente
Gracias, me pregunto por qué el sistema necesitaba 1.5 Gig en caché, pero eso lo deja claro.
Guillaume Coté
1
Es menos una cuestión de "necesidad" que de "usado". En ese momento, había leído al menos esa cantidad del disco duro y lo había guardado en la memoria de reserva en caso de que tuviera que volver a usarlo.
Kees Cook
0

Cuando puse mis manos en el monitor del sistema, el uso de memoria reportado en la pestaña "Recursos" era el mismo que el de la freecolumna /usr/bin/free.

El problema es que la memoria física libre es casi 0, tarde o temprano: Linux se almacena en caché de forma agresiva, por lo que el dinero que gastó comprando RAM se usa de manera eficiente. Y esto significaba que el gráfico mostraría constantemente> 98% del uso de memoria, lo que era inútil.

Así que decidí hacer lo mismo que la -/+ buffers/cache:línea de /usr/bin/free. De esta manera, el gráfico es significativo y permite que el usuario vea el uso de la memoria de la aplicación / usuario en lugar del estado físico de la memoria.

Lo sé, esto es un poco engañoso, porque la mayoría de los usuarios no entienden que la memoria física libre es una pérdida de dinero y rendimiento. Enfrenté el mismo problema en el trabajo: todos los lunes, los servidores se reiniciarían, y en las siguientes 24 horas, cada servidor dispararía una alerta de "memoria llena". Así que tuve el cálculo de memoria libre arreglado en el software de supervisión al igual que en el monitor del sistema.

El actual Solaris tiene el mismo problema: el ZFS Cache (ARC) no está incluido en la memoria libre informada por herramientas como las vmstatque hacen que los estúpidos administradores de DB se quejen de que "ZFS es malo" :)

Benoît
fuente