RAM: ¿por qué Linux se come toda la memoria?

Hoy vamos a realizar un análisis de la memoria RAM en sistemas GNU/Linux, y vamos a responder a esta pregunta: ¿por qué Linux consume tanta memoria RAM?


El uso de la memoria RAM es bueno

La memoria RAM es una región de almacenamiento volátil y de rápido acceso para el sistema, de modo que si hay que elegir entre cargar datos desde la memoria RAM, y hacerlo desde el disco, siempre es más conveniente el acceso desde la RAM.

Ahora bien, las aplicaciones están almacenadas en el disco, los datos están en el disco, y para que un software pueda ejecutarse, parte de sus páginas de datos y código binario deben copiarse a la memoria RAM.

Esto es lo que hace Linux al cargar aplicaciones y al realizar operaciones de lectura/escritura en disco… mantiene información en la memoria RAM porque resulta mucho más rápido para el acceso, que leerla desde el disco.

Linux se comió mi RAM!

Si analizamos la siguiente salida del comando free, utilidad que nos permite ver los espacios libres y ocupados de la memoria del sistema, vamos a notar un dato interesante.

ram memoria memory linux ate ram consumo memoria top htop system sysadmin free

¿Cuánta memoria libre tiene mi sistema?

A simple vista, la columna free me dice que tengo 975M de memoria RAM libres… de 10G, sí, diría que Linux se está comiendo mi memoria como plato principal y postre incluido.

¿Qué está ocurriendo?

Linux está aprovechando la memoria libre del sistema para cargar las caches de disco, así las operaciones de lectura/escritura tienen mejor rendimiento, y en general, la performance del sistema mejora, y mucho.

Cuando tenemos pocas aplicaciones, o poca memoria consumida, Linux igual la usa para cache de disco, por lo que vemos que el consumo de memoria aumenta, sin por ello disminuir el rendimiento del sistema (no se por qué, pero me acordé de Windows 98 y el led del disco a punto de estallar por tanto swapping xD).

¿Qué pasa si abrimos más aplicaciones?

Si abrimos más aplicaciones, o las aplicaciones actuales requieren más consumo de memoria, simplemente el administrador de memoria del núcleo va a liberar parte de la memoria usada para cache, y la asignará a las aplicaciones que lo requieran.

¿Necesitamos más swap?

Si bien la swap, o espacio de intercambio, se utiliza cuando se llena la memoria RAM y se sigue necesitando más espacio para las aplicaciones (memoria virtual), se hace uso de la swap y se utiliza parte del disco como si fuera memoria volátil, de modo que todo siga funcionando… leeento, pero funcionando al fin.

En mi caso, tengo 10G de RAM, y aún así está prácticamente llena, y aún así no tengo consumo de swap. Esto, primero, me da la pauta de que ram memoria memory linux ate ram consumo memoria top htop system sysadmin freeagregar más swap no va a cambiar la situación, solo va a reducirme el espacio utilizable en disco.

Por otro lado, mi sistema no está “swappeando” por el hecho de que la memoria virtual sobra, la RAM que tengo en uso está asignada a cache, y es memoria “utilizable” por el sistema y las nuevas aplicaciones.

No necesito más swap, y no necesito siquiera más RAM (aunque un par de Gibibytes no me vendrían nada mal :D).

¿Se puede detener esto en Linux?

No se puede deshabilitar la cache de disco en Linux (o por lo menos, no completamente a nivel de núcleo, sí algunos parámetros de hdparam para la gestión de dispositivos de bloques).

Y por cierto, no tiene sentido, para nuestro propósito, deshabilitar la cache del sistema, ya que permite que las aplicaciones, y el propio sistema operativo, puedan mejorar sus rendimientos, cargar más rápido, y correr más ágiles. Si bien la memoria se usa para cache, NUNCA se quita memoria disponible para esto, por lo que no hay motivos para deshabilitar la cache de disco (de nuevo, para nuestros propósitos, puede que para otra razón nos sea necesario).

¿Por qué free o top reportan que la memoria está ocupada?

Porque realmente está ocupada… está consumida por cache de disco, lo que no significa que no pueda liberarse y utilizarse.ram memoria memory linux ate ram consumo memoria top htop system sysadmin free

Si nos fijamos nuevamente en la captura de mi terminal, vemos que, aunque casi toda la RAM está ocupada (casi 10G) solo 6G están en uso.

Si nos fijamos bien, tengo mas de 3G ocupados con buffers y cache, y la última columna muestra 3.2G “disponibles” (available).

Esta última columna es la que tenemos que mirar para saber cuánta memoria RAM tenemos disponible en el sistema para ser utilizada por las aplicaciones.

Así, podríamos decir que:

  • La columna de memoria usada, realmente es memoria utilizada.
  • La columna de memoria Free/libre, es lo que realmente está libre en el sistema, sin ningún tipo de uso.
  • Y la columna de memoria disponible/available, es lo que está ocupado por cache y buffers, pero puede ser utilizado por el sistema en cualquier momento que lo necesite.

La confusión radica en la terminología que utiliza Linux para el uso de memoria… en lo que a nosotros respecta, memoria libre puede ser considerada toda la memoria que free muestra como “libre/free“, y toda la que muestra como “disponible/available“.

Conclusiones

Como vimos en este artículo, si la memoria libre que muestran aplicaciones como free o top/htop es muy poca, no significa que se esté haciendo un mal uso de los recursos, todo lo contrario!

Linux hace un excelente uso de los recursos de hardware, tener mucha memoria libre significa que se están desperdiciando recursos muy valiosos y están quedando ociosos. El uso que Linux le da a la RAM para otros usos alternativos “mientras” las aplicaciones no la estén solicitando, es muy importante, ya que mejora el rendimiento general del sistema.

Así que ya saben, si ven que en sus sistemas Linux tienen 2MiB de memoria libre y sin uso, excelente! Tienen un sistema optimizado y aprovechando todos los recursos de hardware.

Los invito a pasar por SysAdmin tools (I): procesos y estado del sistema, para tener una lista más completa de utilidades que nos sirven para analizar el estado de memoria, procesos y recursos del sistema.

Hasta la próxima!


Fuente: www.linuxatemyram.com