Una de las técnicas más sencillas que podemos llevar a cabo para mejorar la respuesta del servidor y protegerlo frente a errores de memoria insuficiente es añadir un poco de espacio de intercambio, lo que se conoce como memoria de intercambio o memoria swap. La memoria swap se puede definir como un espacio en nuestro disco duro designado a que el sistema operativo almacene datos que las memorias RAM no pueden retener de forma temporal.
Esto permite que el servidor pueda guardar parte de su trabajo en esta memoria, pero solo cuando el espacio de la RAM no sea suficiente para los datos que necesita almacenar. En este artículo vamos a explicar cómo crear un espacio de intercambio en un servidor Ubuntu.
Paso 1 – Comprobar el sistema de información Swap
Antes de ponernos manos a la obra, lo primero que debemos hacer es echar un vistazo a la configuración de nuestro sistema operativo para ver si tenemos un poco de espacio de intercambio disponible. Aquí podríamos tener varias particiones para este fin, aunque por lo general con una debería ser suficiente. Esto se puede ver ejecutando la siguiente instrucción desde la consola:
sudo swapon –s
Si tras ejecutar lo anterior solo aparece en pantalla las cabeceras de una tabla, significará que actualmente no tenemos espacio swap habilitado.
Filename Type Size Used Priority
Otra forma de ver si tenemos disponible memoria swap en nuestro sistema es mediante el comando «free». Este comando se encarga de mostrar el uso de los diferentes tipos de memoria del sistema.
free –m
El resultado que aparecería por pantalla sería algo parecido a lo que os mostramos a continuación:
total used free shared buffers cached Mem: 3953 154 3799 0 8 83 -/+ buffers/cache: 62 3890 Swap: 0 0 0
Si en el apartado «Swap» aparece el valor 0, esto quiere decir que no tenemos espacio disponible para este fin.
Paso 2 – Revisar el espacio disponible en la partición del disco duro
Para asignar espacio para el intercambio se suele utilizar una partición independiente. Sin embargo, no siempre es posible cambiar el esquema de particionado utilizado en un servidor. Lo que se puede hacer en estos casos es crear un archivo de intercambio de forma sencilla, que resida en una de las particiones ya existentes. Antes de hacer esto, es muy importante que sepamos el estado de uso de las distintas particiones para ver donde sería más factible crearlo. Podemos conseguir esta información mediante la instrucción:
df –h
Por pantalla tenemos que ver algo parecido a lo siguiente:
Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 312K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user
Como podemos ver en el resultado anterior, nuestro disco duro tiene un tamaño de 55 GB disponibles, lo que se traduce en un gran espacio para trabajar. Ya que sabemos el espacio disponible, ya podemos determinar el tamaño que destinaremos a la memoria swap. En este punto existen opiniones diversas, pero nosotros os recomendamos asignar un espacio que sea al menos igual o el doble de la RAM; por supuesto, esto también dependerá del espacio disponible que tengamos. En nuestro caso, dedicaremos 4 GB a este fin.
Paso 3 – Crear un archivo swap
Una vez que sabemos el espacio que tenemos disponible, vamos a proceder a crear un fichero swap en nuestro sistema de archivos. Para ello vamos a crear uno de nombre «swapfile» en nuestro directorio root. A este archivo tenemos que asignarle el espacio que queremos que tenga. Para ello lo podemos hacer de dos formas diferentes.
1 Método tradicional
Primero de todo, cabe decir que el método tradicional es la opción más lenta. El sistema que se utiliza en este caso es el comando «dd», una herramienta que es capaz de escribir de una ubicación a otra. Para conseguir un tamaño de 4 GB, tenemos que ejecutar la siguiente instrucción:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
Con esto, lo que hacemos es asignar un bloque de tamaño de 1 GB y un contador con el valor 4, que serán las veces que se debería ejecutar. De esta forma conseguiríamos los 4 GB de espacio mediante el uso de ceros como contenido. Os recomendamos que tengáis mucho cuidado a la hora de utilizarlo, ya que si ponemos mal algún tipo de información, podríamos corromper el sistema. Tampoco os preocupéis si veis que tarda mucho tiempo en generarse, se trata de un fichero muy grande, así que es normal que tarde.
2 Método rápido
La forma más rápida de conseguir esto es utilizando el programa «fallocate». Este comando crea un fichero del tamaño indicado de forma inmediata. Para crear un archivo hay que ejecutar lo siguiente:
sudo fallocate –l 4G /swapfile
El archivo se crea inmediatamente y lo podemos comprobar ejecutando la siguiente instrucción:
ls –lh /swapfile
Como salida deberíamos ver algo parecido a lo siguiente:
-rw-r--r-- 1 root root 4.0G Jul 03 17:15 /swapfile
Paso 4 – Habilitar el archivo swap
Aunque ya hemos creado nuestro archivo, el sistema no sabe que queremos utilizarlo como partición de intercambio. Así que ahora toca darle formato y activarlo. Para ello debemos ajustar los permisos en nuestro archivo, para que solo el usuario root pueda leerlo, porque dejar que cualquiera pudiera acceder a él supondría un problema de seguridad importante. Para cambiar los permisos debemos ejecutar:
sudo chmod 600 /swapfile
Lo siguiente que haremos será indicar al sistema que ese fichero se usará como memoria swap. Para ello ejecutaremos lo siguiente:
sudo mkswap /swapfile
Por pantalla tenemos que ver algo parecido a esto:
Setting up swapspace version 1, size = 4194300 KiB no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944
Nuestro archivo está listo para ser utilizado como espacio swap, así que vamos a activarlo.
sudo swapon /swapfile
Ahora podemos verificar si nuestro sistema nos informa de que tenemos un espacio creado de tipo swap.
sudo swapon –s
Por pantalla deberíamos ver algo así:
Filename Type Size Used Priority /swapfile file 4194300 0 -1
Si utilizamos la herramienta «free», nos debería aparecer que la memoria swap tiene espacio disponible, en lugar del valor 0 que aparecía antes.
free -m
La salida sería la siguiente:
total used free shared buffers cached Mem: 3953 101 3851 0 5 30 -/+ buffers/cache: 66 3887 Swap: 4095 0 4095
Paso 5 – Hacer permanente el archivo de intercambio
Aunque hayamos creado nuestro archivo de intercambio, cada vez que reiniciemos la máquina el sistema no lo habilitará de forma automática. Para que esto ocurra tenemos que modificar el archivo «fstab». Para ello lo editaremos con privilegios root con nuestro editor de preferencia.
sudo nano /etc/fstab
En la parte inferior del archivo tenemos que añadir una línea que será la encargada de indicar al sistema que utilice el archivo creado de forma automática.
/swapfile none swap sw 0 0
Cuando hayas añadido esa línea, puedes guardar y salir.
Paso 6 – Afinar la configuración de nuestra memoria swap
Para finalizar, es bueno que realicemos algunas acciones para mejorar el rendimiento del sistema de intercambio. El parámetro «swappiness» configura la frecuencia con la que su sistema intercambia datos de memoria RAM con el espacio de intercambio. El «swappinness» es un valor que va de 0 a 100. Cuando el valor esté cerca de 0, no se intercambiará datos en el disco a menos que sea absolutamente necesario. Si por el contrario, el valor está más cerca de 100, se llevarán a cabo un mayor número de intercambios para dejar más espacio libre en la RAM.
Si queremos ver el valor actual de «swappiness», lo podemos hacer ejecutando la siguiente instrucción:
cat /proc/sys/vm/swappiness
Para asignar un valor de 10 a este parámetro, podemos ejecutar:
sudo sysctl vm.swappiness=10
El valor se mantendrá así hasta el próximo reinicio de la máquina. Si queremos que sea permanente, podemos añadir la siguiente línea al final de nuestro /etc/sysctl.conf.
vm.swappiness=10
Cuando termines, guarda y cierra el archivo. Como véis, crear un archivo para utilizarlo como memoria swap en Ubuntu no es nada complicado. El beneficio para el rendimiento de nuestro sistema puede ser considerable. Recuerda realizar siempre copias de seguridad antes y, si dudas, pregunta o delega en profesionales de administración de sistemas.