/ GNU/Linux

Crear archivo swap en Ubuntu Server

Si dispones de un servidor VPS, seguramente que no tiene por defecto habilitado la memoria Swap. Si además, tu caso, es parecido al mío, te puedes encontrar con que tu página web se vea inaccesible.

Y ¿cuál es mi caso? pués un modesto servidor VPS de 512 MB. Tampoco me puedo quejar, ya que funciona muy bien, y para mis necesidades (y visitas al blog) es suficiente, además de barato. Pero ya me ha ocurrido una vez, que mi WordPress se quede inaccesible por falta de memoria (algo que solucioné reiniciando el servidor).

Para ayudar a mi servidor en la gestión de memoria, vamos a crear un archivo Swap en Ubuntu. Normalmente, se suele crear una partición en exclusiva para la Swap, pero al ser un VPS, no puedo gestionar las particiones, y por tanto habilitaremos un archivo Swap dentro de nuestra partición.

Tampoco soy un SysAdmin, ni un gurú de todo esto, y tal vez, habilitar la memoría Swap no sea ninguna solución. Pero por lo menos hay queda la cosa, y ya veremos.

Todo lo explicado aquí, está sacado de los tutoriales de la comunidad de Digital Ocean. Puedes leer el artículo original que está en inglés, pero muy fácil de entender.

1. Comprobar si ya tenemos habilitada la memoria swap

Antes de comenzar, comprobaremos que no estemos ya trabajando con memoria Swap. Es posible disponer de varios archivos Swap, pero normalmente con uno sobra.

free -m

y podremos observar algo parecido a esto:

total       used       free     shared    buffers     cached
Mem:          3953        154       3799          0          8         83
-/+ buffers/cache:         62       3890
Swap:            0          0          0

Si nos fijamos en la linea de Swap, no tenemos nada.

2. Comprobar el espacio disponible en nuestra partición.

df -h

y nos devolverá 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

En este caso en (/dev/vda), disponemos de una partción de 59GB y disponible 55GB. Aunque en mi caso particular, tengo una partición de 20GB.

Ahora toca decidir cuanto espacio dejaremos para el Swap. Normalmente, se suele hacer una estimación del doble de tu memoria RAM. Como yo tengo una memoria de 512 MB, voy usar una memoria de Swap de 1 GB.

3. Crear el archivo Swap

Vamos a crear un archivo Swap de 1GB de espacion dentro del directorio raiz (/) de nuestra partición.

sudo fallocate -l 1G /swapfile

Podemos verificar el espacio reservado:

ls -lh /swapfile

y nos devolverá algo parecido:

-rw-r--r-- 1 root root 1.0G Sep  1 16:59 /swapfile

Ahora vamos a cambiar los permisos del archvo para obtener más seguridad:

sudo chmod 600 /swapfile

y si volvemos a revisar con el comando ls -lh /swapfile, veremos los nuevos permisos del archivo:

-rw------- 1 root root 1.0G Sep  1 16:59 /swapfile

4. Habilitar el archivo Swap

Ahora que tenemos el archivo preparado, tenemos que decirle a nuestro sistema que lo utilice como Swap. Para ello vamos a darle al archivo un formato Swap, y habilitarlo para que funcione como un espacio Swap.

sudo mkswap /swapfile
sudo swapon /swapfile

Podemos verificar con free -m, que de verdad funciona todo bien:

total       used       free     shared    buffers     cached
Mem:           490        444         45         52         55        136
-/+ buffers/cache:        251        238
Swap:         1023         56        967

5. Hacer permanente el archivo Swap

Aunque tenemos funcionando el archivo Swap, no está permanente en nuestro sistema. Así que cada vez que reiniciemos el ordenador, nuestro sistema “olvidará” que tiene que tiene que usar el archivo Swap.

Para hacerlo permanente, tendremos que editar el archivo /etc/fstab:

sudo nano /etc/fstab

Una vez abierto el archivo, añadiremos al final del todo la siguiente linea:

/swapfile   none    swap    sw    0   0

Guardamos (Ctrl+o) y salimos (Ctrl+x).

6. Ajustando nuestra configuración Swap

Podemos ajustar algunas opciones, para decidir como tiene que trabajar nuestro Swap recién creado. Para ello vamos a configurar el parámetro swappiness. Que a grandes rasgos, decide cuando usar la Swap. Se expresa de 0 a 100, siendo un valor de porcentaje. Con un valor de 0, el kernel sólo usará la Swap cuando sea estrictamente necesario. La interacción con la Swap es más lenta que con la RAM, por lo tanto, puede que en un sistema VPS necesitemos un valor de 0, o bastante bajo.

Podemos ver el actual valor de swappiness:

cat /proc/sys/vm/swappiness

y en mi caso, me devuelve un valor de 60.

Podemos cambiar el valor del 60% al 10%, usando el siguiente comando:

sudo sysctl vm.swappiness=10

Para hacer permanente el cambio, editaremos el archivo /etc/sysctl.conf:

sudo nano sysctl.conf

y añadimos la siguiente linea al final del archivo:

vm.swappiness=10

Guardamos (Ctrl+o) y salimos (Ctrl+x).

SwapUbuntu, un script de ayuda

Para finalizar, también me gustaría indicar que existe un script en GitHub, que nos ayudará en muy pocos pasos, hacer todo lo que hemos descrito hasta ahora. El script lo podemos encontrar en este enlace y su creador es Charles Crete.

Uso

Descargamos el script:

wget    https://raw.githubusercontent.com/CraftThatBlock/SwapUbuntu/master/swap.sh -O swap

ejecutamos el script:

sh swap {tamaño}

donde {tamaño} es la cantidad swap que queremos reservar: sh swap 1G.

Eso es todo y un saludo navegantes!