Munin: entender el gráfico de uso de memoria.

Munin es una herramienta muy útil para analizar el rendimiento de uno o varios servidores linux, y localizar posibles problemas de configuración o falta de recursos. Pero es muy importante el saber interpretar bien la información que presenta de forma gráfica para no cometer errores. Sin ir mas lejos, yo mismo, me pasé varios días intentando arreglar un problema de falta de memoria en mi servidor VPS que finalmente resultó no ser tal. El problema real en mi caso, era de una falta de conocimientos sólidos del uso de memoria del sistema operativo Linux en primer lugar, y de la interpretación de los gráficos de munin en segundo lugar.

Sea como fuere, para buscar soluciones rápidas a problemas, a veces no podemos detenernos en repasar toda la teoría del funcionamiento del sistema operativo Linux, y necesitamos información mas concreta y útil  Por ese motivo, he pensado en hacer este pequeño artículo desgranando el gráfico de memoria de Munin para ayudar en su interpretación.

Linux y la memoria cache

El principio por el cual se rige el sistema operativo Linux para administrar la memoria ram, es el de que la memoria ram no usada es inútil  Esto es un detalle muy importante a tener en cuenta cuando nos enfrentemos a un gráfico de consumo de memoria, o examinemos los Mb libres de ram utilizando herramientas como top o htop. Linux siempre va a tender a utilizar toda la memoria ram disponible en el sistema. Las aplicaciones consumirán una parte de la memoria ram, y la que sobre será usada para hace caché de disco (no confundir con la paginación – swap).

Supongamos que tenemos un servidor VPS con 512Mb de ram, y fijandonos en la memoria libre que puedes ver en el comando top, observamos que no tenemos mas que 60Mb libres, e incluso, a veces valores peligrosamente cerca de 0. Solicitamos una ampliación a nuestro proveedor, digamos, a 1Gb de ram, y tras reiniciar el servidor y esperar unas horas, observamos que la memoria libre vuelve a ser muy poca o casi ninguna, cuando ahora tenemos el doble de ram. ¿Nos estamos quedando de nuevo sin memoria? En realidad no. ¿Nos estabamos quedando sin memoria con 512MB de ram? Posiblemente tampoco. ¿Significa esto que tener 1Gb de ram no es mejor que tener 512Mb? Espero poder explicar la respuesta a esta pregunta en los siguientes parrafos.

Linux tenderá siempre a maximizar el uso de memoria ram, así que si después de asignarle memoria a nuestras aplicaciones aun le sobra, la utilizará para hacer cache de disco. Por eso siempre veremos valores de memoria ram libre bajos.

El gráfico de memoria de munin.

A continuación tenemos un gráfico de memoria de munin, en el cual se ha resaltado una zona:

Munin apila el primer conjunto de información como regiones de colores, y el segundo conjunto de información, como lineas
Munin apila el primer conjunto de información como regiones de colores, y el segundo conjunto de información, como lineas

Lo primero que tenemos que entender, y que personalmente yo no veía claro al principio, es que en este gráfico  las seccion apps, page tables, swap cache, slab cache, buffers, unused y swap, se representan apiladas, y que sus valores son aditivos. El resto de información (inactive, commited, active, vmalloc_used y mapped), se representan como lineas y sus valores no se deben sumar.

Viendo este grafico, sumando los valores de los sectores que van de apps a unused, podemos deducir que el vps al que nos enfrentamos, tiene 768Mb de ram, y 256Mb de swap.

En un primer vistazo, puede parecer que nuestro servidor se esta quedando sin ram, ya que la parte de color ¿amarillo? y etiquetada con «unused», es muy pequeña (34.9Mb). En realidad esto no es correcto, ya que lo que ocurre es que linux esta aprovechando la memoria ram sin utilizar, para hacer caché de disco (parte azul del gráfico).

En el momento en que una aplicación necesite mas memoria ram, linux simplemente reducirá la memoria ram dedicada a cache, y se la dará a la aplicacion  demandante.

La mejor manera de saber cuanta memoria ram tenemos para nuestras aplicaciones, es ejecutar el comando free -m, y observar el valor de la linea -/+ buffers/cache:

Memoria realmente libre en linux

La cantidad de memoria disponible para aplicaciones, es 756Mb – apps – buffers (aproximadamente). En realidad la parte de la ram, asignada a la cache, esta siendo usada, pero se puede liberar en cualquier momento para las aplicaciones, así que se cuenta como memoria ram libre.

Como vemos, el vps del ejemplo tiene 436Mb de memoria libre para las aplicaciones. Si sumamos lo que usan las aplicaciones y los buffers, tenemos que el consumo de ram es de aprox 357Mb de ram (en el ejemplo, el gráfico de munin no se corresponde exactamente en el tiempo con la ejecución del comando free, por lo tanto las cifras no coinciden exactamente).

¿ Significa eso que nos sobra ram en nuestro servidor y que podriamos sobrevivir con 512Mb? Si y no. Si, porque el uso de memoria de las aplicaciones parece que esta entre de los 300-400Mb continuamente. Sin embargo si reducimos la cantidad de ram, linux podra dedicar menos ram a hacer cache de disco, y por lo tanto el rendimiento general se resentirá.

Al final, todo se reduce a probar el rendimiento de nuestro vps, vigilar el consumo de memoria, e ir afinando. Quizás la diferencia de rendimiento de tener 512mb de ram a tener 756Mb no sea apreciable. O quizás si.

Recursos: