Skip to main content

Linux se esta comiendo mi memoria

La página www.linuxatemyram.com explica muy sencillamente como funciona la cache de disco en Linux. La he traducido como ejercicio y para ofrecerla a quien no la comprenda en inglés.

¿Qué está pasando?

Linux esta pidiendo prestada la memoria no usada para cachear el disco. Esto hace parecer como que estas bajo de memoria, ¡pero no lo estas! ¡Todo esta bien!

¿Por qué está haciendo esto?

Cachear el disco hace el sistema mucho más rápido. No hay desventajas, excepto el confundir a los principiantes. No toma memoria de tus aplicaciones de ningún modo. ¡Nunca!

¿Y si quiero ejecutar más aplicaciones?

Si tus aplicaciones quieren más memoria, sólo tienen que recuperar un pedazo de lo que la cache de disco pidió prestado.

¿Necesito más swap?

No, la cache de disco sólo pide prestado la RAM que las aplicaciones actualmente no quieren. No usará memoria virtual (swap). Si las aplicaciones quieren más memoria, solo tienen que recuperarla de la cache de disco. Las aplicaciones no empezarán a intercambiar memoria con la memoria virtual (swaping)

¿Como interrumpo a Linux de hacer esto?

No puedes deshabilitar la cache de disco. La única razón en la que alguien querría deshabilitar la cache de disco es porque piensa que toma memoria de sus aplicaciones, ¡lo cual no hace! La cache de disco hace que las aplicaciones se ejecuten más rápido y más suavemente, pero NUNCA JAMÁS tomará memoria de ellas. Por lo tanto, no hay absolutamente ninguna razón para deshabilitar la cache de disco.

¿Por qué top y free dicen que toda mi RAM esta usada si no es así?

Esto es un mal entendido en los términos. Ambos tú y Linux estáis de acuerdo que la memoria tomada por aplicaciones es “usada”, mientras que la memoria que no esta usada por nada es “libre”

¿Pero como llamas a la memoria que es usada por algo y que esta disponible para las aplicaciones?

Tú la llamarías “libre”, pero Linux la llama “usada”.

Memoria es Para ti es Para Linux es
Usada por aplicaciones Usada Usada
Disponible para aplicaciones pero usada por algo Libre Usada
No usada por nada Libre Libre

Este “algo” es lo que los comandos top y free llaman “buffers” y “cached”. Ya que la terminología entre tú y Linux difiere, piensas que estas bajo de RAM cuando realmente no lo estas.

¿Como puedo ver cuanta RAM libre realmente tengo?

Para ver cuanta RAM esta libre para uso de tus aplicaciones, ejecuta el comando free -m y mira la fila que dice “-/+ buffers/cache” en la columna que dice “free”. Esa es tu respuesta en megabytes:

Si no sabes como leer los números, pensarás que la RAM esta al 99% llena cuando en realidad es sólo 42%.

¿Como puedo verificar estas cosas?

Ve a esta página para más detalles y como puedes experimentar con la cache de disco.

Cómo instalar Open SSH en Ubuntu Server 12.04

Es posible que nuestro servidor remoto nos sea entregado con el servicio SSH instalado en él. De forma que con el usuario root que nos facilitarían podríamos acceder. Si no fuera el caso, y necesitaríamos instalar SSH en nuestro servidor podríamos usar el siguiente comando.

Al de pocos segundos se descargarán los paquetes necesarios, se instalará y quedará listo para usar.

Un comando que hace lo mismo, pero que podríamos preferir es usando tasksel. Veamoslo:

Una vez instalado open-ssh podremos acceder de forma segura al servidor remoto desde nuestro equipo local usando un comando como:

Donde el usuario, será uno existente en el servidor, del cual disponemos de la contraseña, y example.com, el nombre de dominio del servidor remoto. Tras autentificarnos en el servidor remoto se nos abrirá un terminal con una shell, donde podremos introducir ordenes, como si estuviésemos sentados ante el servidor.

Actualización: En el siguiente vídeo podemos ver la instalación de Ubuntu Server 12.04.1 y la instalación del servidor SSH en él.

Usando ioping en Ubuntu Server 12.04 LTS

En un servidor web dedicado o en un servidor privado virtual el rendimiento de entrada / salida (input / output, io), principalmente el de acceso al disco duro es muy relevante. En la generación de una página web dinámica, se hacen multitud de accesos al disco duro. Se leen los diferentes archivos con el código que forman la aplicación, los archivos de configuración del servidor y del interprete, se rebusca entre los archivos de las bases de datos, los diferentes elementos estáticos de la web como pueden ser las imágenes, y otros elementos más. Como se ve multitud de accesos al sistema de archivos se suceden para construir lo que en un instante se muestra en el navegador.

Por eso, poder medir para comparar el rendimiento de nuestro servidor en lectura y escritura es definitivamente muy importante. Para este propósito existe una aplicación, que en Ubuntu Server 12.04 LTS esta disponible en sus repositorios, llamada ioping.

Para instalar ioping en nuestro servidor simplemente debemos ejecutar en un terminal la siguiente orden:

sudo aptitude install ioping

Esto dejará ioping instalado y listo para uso en nuestro sistema.

Modo de empleo

Podemos indicarle que ponga a prueba el sistema de ficheros local con una cuenta de 10 con el siguiente comando. Al finalizar nos dará un resumen de las pruebas. El comando es:

ioping . -c 10

Mostrará algo semenjante a:

4096 bytes from . (ext3 /dev/xvda1): request=1 time=26.5 ms
4096 bytes from . (ext3 /dev/xvda1): request=2 time=14.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=3 time=0.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=4 time=33.2 ms
4096 bytes from . (ext3 /dev/xvda1): request=5 time=21.9 ms
4096 bytes from . (ext3 /dev/xvda1): request=6 time=12.5 ms
4096 bytes from . (ext3 /dev/xvda1): request=7 time=15.8 ms
4096 bytes from . (ext3 /dev/xvda1): request=8 time=20.0 ms
4096 bytes from . (ext3 /dev/xvda1): request=9 time=20.3 ms
4096 bytes from . (ext3 /dev/xvda1): request=10 time=17.3 ms

--- . (ext3 /dev/xvda1) ioping statistics ---
10 requests completed in 9121.8 ms, 84 iops, 0.3 mb/s
min/avg/max/mdev = 0.3/11.9/39.9/13.3 ms

Un rendimiento que como se ve ha de considerarse pobre para en sistema de ficheros en producción.
El mismo sistema de ficheros probado de otra forma:

ioping . -R
--- . (ext3 /dev/xvda1) ioping statistics ---
962 requests completed in 3005.4 ms, 334 iops, 1.3 mb/s
min/avg/max/mdev = 0.2/3.0/73.5/6.3 ms

Más información

En la página del manual se muestran todas la opciones disponibles en ioping y una explicacion detallada de ellas. Además podemos acceder al código fuente en Google Code.