Administrar la memoria virtual en Ubuntu 14.04 LTS
Como probablemente ya sepas, la memoria virtual es la técnica que utilizan los sistemas operativos modernos para que las partes de un proceso que no estén siendo utilizadas en un momento concreto, puedan residir en memoria secundaria.
Como recordarás de un artículo anterior, Windows crea un archivo de paginación donde guarda esas partes de los procesos que no están en la memoria principal (RAM). En el caso de GNU/Linux, esta información se guarda en una partición de disco, con un formato especial, llamada swap.
Si lo prefieres, en GNU/Linux también puedes hacer que el área de intercambio sea un archivo… Pero eso será otra historia, que será contada en otro momento.
La primera consecuencia de esto es que el área de intercambio de Windows, al tratarse de un archivo, puede cambiar de tamaño a lo largo del tiempo según la conveniencia del propio sistema operativo (ver el artículo Administrar la memoria virtual en Windows 8.1). Sin embargo, en GNU/Linux, para cambiar el tamaño del área de intercambio, tendremos que cambiar el tamaño de la partición swap.
Lo que sí podemos conseguir fácilmente es cambiar el modo en el que se comporta la memoria virtual en GNU/Linux, en particular, lo haremos en Ubuntu 14.04 LTS, aunque es idéntico en otras versiones.
De forma predeterminada, el sistema trata de que siempre haya una porción considerable de memoria RAM disponible. Así, si en un momento determinado ejecutas una aplicación nueva, o una de las aplicaciones que ya estás ejecutando solicita una gran porción de memoria, el sistema podrá responder de forma eficiente.
Este planteamiento, que a priori parece interesante, hace que siempre tengamos una parte de la memoria principal sin utilizar, mientras que se están produciendo operaciones de entrada/salida con el disco duro que hacen bajar el rendimiento. Esto no quiere decir que debamos eliminar el intercambio de memoria, pero debemos pensar que su configuración predeterminada trata de dar respuesta a una gran diversidad de situaciones.
Si utilizas discos SSD, reducir las operaciones de escritura sobre ellos puede aumentar considerablemente su vida útil.
En ordenadores con poca memoria RAM, en servidores con una gran actividad u otros equipos que ejecuten aplicaciones con grandes necesidades de RAM, el uso de los valores predeterminados pueden ser adecuados (incluso puede que sea buena idea ampliarlos).
Sin embargo, en ordenadores con una cantidad de memoria RAM suficiente, u ordenadores poco potentes en los que la sobrecarga que supone el intercambio de memoria haga bajar considerablemente el rendimiento, puede ser una gran idea reducir el uso de la memoria de intercambio.
Una vez que tenemos esto claro, probablemente estarás haciéndote una pregunta: ¿cómo decide el sistema operativo el límite de ocupación de la memoria RAM a partir de la que debe paginar información a disco? Pues bien, la respuesta es muy sencilla. Lo establece un valor almacenado por el sistema operativo llamado swappiness. Este valor es un número comprendido entre 0 y 100
Para entender cómo funciona, vamos a realizar algunas apreciaciones:
- Si swappiness contiene el valor 0, el sistema operativo no utilizará el área de intercambio.
- Si swappiness contiene el valor 100, el sistema estará tratando de almacenar en memoria secundaria la mayor cantidad posible de memoria RAM.
- El valor predeterminado de swappiness en Ubuntu 14.04 LTS es de 60, lo que hace que el sistema trate de disponer siempre de una cantidad considerablemente alta de memoria RAM desocupada.
- Este valor predeterminado es válido en servidores con una una carga de trabajo media-alta.
- En la mayoría de los equipos actuales, quizás sería más apropiado un valor próximo a 10, aunque, si tienes un equipo con menos de 1 GB de RAM, podríamos llegar hasta 5.
Una forma sencilla de abrir la ventana de terminal consiste en pulsar la combinación de teclas Alt + Control + T.
En cualquier caso, lo primero será asegurarnos del valor de swappiness que tenemos en nuestro sistema. Algo tan sencillo como abrir una ventana de terminal y escribir lo siguiente:
cat /proc/sys/vm/swappiness
Si quieres cambiar el valor de swappiness para la sesión actual, sólo tienes que ejecutar el siguiente comando:
sudo sysctl -w vm.swappiness=10
Ahora, comprobamos que el valor ha cambiado:
Lógicamente, si con el uso notas que en tu sistema el cambio no ha sido adecuado (por ejemplo, que en lugar de aumentar el rendimiento, disminuye), puedes ejecutar de nuevo la orden anterior para volver a cambiarlo hasta encontrar el equilibrio correcto.
En cualquier caso, el nuevo valor de swappiness se perderá la próxima vez que reinicies, recuperando su valor predeterminado. Si después de probar, quieres que el cambio se haga definitivo, debes modificar el archivo sysctl.conf:
sudo gedit /etc/sysctl.conf
Una vez abierta la ventana del editor de texto, nos desplazamos hasta el final del archivo y añadimos lo siguiente:
vm.swappiness=10
… Y guardamos los cambios
Para comprobar que funciona, sólo tienes que reiniciar tu ordenador y realizar la comprobación que hacíamos al principio del artículo.
Por último, si quieres saber, en un momento concreto, el uso que se está haciendo de la memoria, puedes recurrir al siguiente comando:
free
En nuestro ejemplo, puedes comprobar que de los 2 GB de memoria RAM que tenemos en el equipo, en ese momento se estaban usando aproximadamente 1,2 GB (quedando libres unos 0,8 GB).
En cuanto a la memoria de intercambio, de los casi 4 GB que tenemos definidos, no se está usando nada. Son los efectos inmediatos del ajuste que hemos hecho en este artículo.
Si necesitas más detalles, puedes recurrir a la página de documentación de Ubuntu: http://manpages.ubuntu.com/manpages/trusty/es/man1/free.1.html.
Espero que te resulte útil.
One more thing…
Recuerda que ya hemos dedicado otro artículo a la memoria virtual de Windows 8.1: Administrar la memoria virtual en Windows 8.1.