Pasos para añadir memoria swap en un servidor Ubuntu

 04/Jul/2016 -   Sistemas
Pasos para añadir memoria swap en un servidor Ubuntu

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 (swap), que se puede definir como un espacio en nuestro disco duro que ha sido designado como el lugar donde el sistema operativo puede almacenar datos que no puede retener las memoria RAM de forma temporal.

Gracias a esto, el servidor podrá guardar parte de su trabajo en esta memoria, pero teniendo en cuenta que solo se utilizará 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 nuestro 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, que de forma general, con uno solo debería ser suficiente. Esto se puede ver ejecutando la siguiente instrucción desde consola.

sudo swapon –s

Si tras ejecutar lo anterior, sólo 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” que se encarga de mostrar el uso de los diferentes tipos de memoria del sistema.

free –m

El resultado que nos 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 vemos que en el apartado Swap aparece el valor 0, significará que no tenemos espacio disponible para este fin.

Paso 2 – Revisa el espacio disponible en la partición de tu disco duro

La forma habitual de asignar espacio para el intercambio, es hacer uso de una partición independiente para este fin. El problema es que 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 y 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 deberíamos 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, es hora de determinar el tamaño que destinaremos a la swap. En este punto cada persona podría tener su propia opinión, pero yo os recomiendo de asignar un espacio que al menos sea igual o el doble de la RAM, claro está, ya 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 le debemos asignar el espacio que queremos que tenga. Para ello, lo podemos hacer de dos formas diferentes.

1.- Método tradicional, más lento

El sistema utilizado en este caso, sería el comando “dd”, una herramienta que es capaz de escribir de una ubicación a otra. Para conseguir un tamaño de 4 GB, lo que deberíamos ejecutar sería la siguiente instrucción.

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

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. Tened en cuenta que se trata de un fichero muy grande.

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 sin tener que escribir contenido sin sentido en su interior. Para crear un archivo, deberíamos ejecutar lo siguiente.

sudo fallocate –l 4G /swapfile

La creación será inmediata y lo podemos comprar mediante la ejecución de la 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 archive Swap

Ya hemos creado nuestro archive, pero el sistema no sabe que lo queremos utilizar para como partición de intercambio. Lo que debemos hacer ahora es darle formato y luego activarlo. Para ello, debemos ajustar los permisos en nuestro archivo para que no pueda ser leída por cualquier persona, únicamente por el usuario root. Dejar que cualquiera pudiera acceder a ella, sería un importante problema de seguridad. Para cambiar los permisos, debemos ejecutar:

sudo chmod 600 /swapfile

Lo siguiente que haremos será indicar al sistema que ese fichero será utilizado como memoria swap. Para ello ejecutamos lo siguiente:

sudo mkswap /swapfile

Por pantalla deberemos ver algo parecido a lo siguiente.

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. Lo que deberemos hacer, será activarlo.

sudo swapon /swapfile

Ahora podemos verificar si nuestro sistema nos informa 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 vez 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 archive 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, debemos modificar el archivo “fstab”. Para ello, lo editaremos con privilegios root con nuestro editor favorito.

sudo nano /etc/fstab

En la parte inferior del archivo, debemos añadir una línea que será la encargada de indicar al sistema que utilice de forma automática el archivo creado.

/swapfile   none    swap    sw    0   0

Guardar y salir una vez añadida esa línea.

Paso 6 – Afinando 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. 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

Este valor se mantendrá así hasta el próximo reinicio de la máquina, pero si queremos que sea permanente, podemos añadir la siguiente línea a nuestro /etc/sysctl.conf al final del todo.

vm.swappiness=10

Guarda y cierra ese archivo.

Como habéis podido observar a lo largo de esta entrada, crear un archivo para utilizarlo como memoria swap 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 un profesionales de administración de sistemas.