Cómo agregar espacio swap en tu VPS
Una forma de protegerse contra errores de falta de memoria en las aplicaciones es agregar espacio swap a tu servidor. En esta guía, te muestro cómo agregar un archivo de intercambio a un VPS Ubuntu 22.04.
Índice de artículo
¿Qué es Swap?
El espacio de intercambio o espacio swap, es una parte del almacenamiento del disco duro que se ha reservado para que el sistema operativo almacene temporalmente los datos que ya no puede almacenar en la RAM. Esto le permite aumentar la cantidad de información que tu servidor puede mantener en su memoria de trabajo, con algunas salvedades. El espacio de intercambio del disco duro se utilizará principalmente cuando ya no haya suficiente espacio en la RAM para almacenar los datos de las aplicaciones en uso.
La información que se escribe en el disco será significativamente más lenta que la que se guarda en la RAM, pero el sistema operativo preferirá mantener los datos de las aplicaciones en ejecución en la memoria y utilizar la memoria de intercambio para los datos más antiguos. En general, tener espacio de intercambio como respaldo para cuando se agote la RAM del sistema puede ser una buena red de seguridad contra excepciones de falta de memoria en sistemas con almacenamiento que no sea SSD disponible.
Paso 1: Comprobación de la información de swap en el sistema
Antes de comenzar, podemos comprobar si el sistema ya tiene algo de espacio swap disponible. Es posible tener varios archivos swap o particiones swap, pero por lo general, uno debería ser suficiente.
Podemos ver si el sistema tiene algún swap configurado escribiendo:
sudo swapon --show
Si no hay ningún resultado, significa que el sistema no tiene espacio de intercambio disponible actualmente.
Podés verificar que no haya ningún intercambio activo usando el comando free
:
free -h
Output total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B
Como se puede ver en la fila Swap de la salida, no hay ningún swap activo en el sistema.
Paso 2: Comprobación del espacio disponible en la partición del disco duro
Antes de crear nuestro archivo de intercambio, comprobaremos el uso actual del disco para asegurarnos de que tengamos suficiente espacio. Para ello, ejecutamos lo siguiente:
df -h
Output Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000
En este caso, el dispositivo que aparece como /
en la columna Mounted on
es nuestro disco. En este ejemplo, tenemos mucho espacio disponible (solo se utilizan 1,4 G). Probablemente, en tu caso el consumo de datos será diferente.
Aunque existen muchas opiniones sobre el tamaño adecuado de un espacio swap, en realidad depende de tus preferencias personales y de los requisitos de su aplicación. En general, una cantidad igual o el doble de la cantidad de RAM de tu sistema es un buen punto de partida. Otra buena regla general es que cualquier cantidad superior a 4 GB de espacio de intercambio probablemente sea innecesaria si solo la estás utilizando como reserva de RAM.
Paso 3 – Creación de un archivo swap
Ahora que conocemos el espacio disponible en el disco duro, podemos crear un archivo de intercambio en nuestro sistema de archivos. Asignaremos un archivo del tamaño que queremos que se llame swapfile
en nuestro directorio raíz (/).
La mejor forma de crear un archivo de intercambio es con el comando fallocate
. Este comando crea instantáneamente un archivo del tamaño especificado.
Como el servidor de nuestro ejemplo tiene 1 GB de RAM, crearemos un archivo de 1 GB en esta guía. Genera un archivo de un tamaño superior para satisfacer las necesidades de tu propio servidor:
sudo fallocate -l 1G /swapfile
Podemos verificar que se reservó la cantidad correcta de espacio escribiendo:
ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Nuestro archivo ha sido creado con la cantidad correcta de espacio reservado.
Paso 4 – Habilitar el archivo swap
Ahora que tenemos disponible un archivo del tamaño correcto, necesitamos convertirlo en espacio swap.
En primer lugar, debemos bloquear los permisos del archivo para que solo los usuarios con privilegios de root puedan leer el contenido. Esto impide que los usuarios normales puedan acceder al archivo, lo que tendría importantes implicaciones de seguridad.
Hacer que el archivo sea accesible sólo para root escribiendo:
sudo chmod 600 /swapfile
Verificar el cambio de permisos escribiendo:
ls -lh /swapfile
Output -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Como se puede ver, solo el usuario root tiene persmisos de lectura y escritura.
Ahora podemos marcar el archivo como espacio swap escribiendo:
sudo mkswap /swapfile
Output Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Luego de marcar el archivo, podemos habilitar el archivo swap, permitiendo que nuestro sistema comience a usarlo:
sudo swapon /swapfile
Verificar que el swap esté disponible escribiendo:
sudo swapon --show
Output NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
Podemos verificar con el comando free
nuevamente:
free -h
Output total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi
Nuestro swap se ha configurado correctamente y nuestro sistema operativo comenzará a usarlo según sea necesario.
Paso 5 – Hacer que el archivo swap sea permanente
Nuestros cambios recientes han habilitado el archivo swap para la sesión actual. Sin embargo, si reiniciamos, el servidor no conservará la configuración swap automáticamente. Podemos cambiar esto agregando el archivo swap a nuestro archivo /etc/fstab
.
Realizar una copia de seguridad del archivo /etc/fstab
en caso de que algo salga mal:
sudo cp /etc/fstab /etc/fstab.bak
Agregar la información del archivo swap al final del archivo /etc/fstab
escribiendo:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
A continuación revisaremos algunas configuraciones que podemos actualizar para ajustar nuestro espacio de intercambio.
Paso 6 – Ajustar de la configuración swap
Hay algunas opciones que podés configurar y que tendrán un impacto en el rendimiento de tu sistema al trabajar con swap.
Ajuste de la propiedad Swappiness
El parámetro swappiness
configura la frecuencia con la que el sistema intercambia datos de la RAM al espacio de intercambio. Es un valor entre 0 y 100 que representa un porcentaje.
Con valores cercanos a cero, el kernel no intercambiará datos con el disco a menos que sea absolutamente necesario. Recuerdar que las interacciones con el archivo swap son “costosas” porque toman mucho más tiempo que las interacciones con la RAM y pueden causar una reducción significativa en el rendimiento. Si le dicimos al sistema que no dependa demasiado del archivo de intercambio, generalmente el sistema será más rápido.
Los valores más cercanos a 100 intentarán colocar más datos en la memoria de intercambio para intentar mantener más espacio libre en la RAM. Según el perfil de memoria de sus aplicaciones o para qué esté utilizando su servidor, esto podría ser mejor en algunos casos.
Podemos ver el valor de swappiness actual escribiendo:
cat /proc/sys/vm/swappiness
Output 60
Para una computadora de escritorio, un valor de swappiness de 60 no es malo. Para un servidor, es posible que queramos acercarlo a 0.
Podemos establecer el swappiness a un valor diferente usando el comando sysctl
.
Por ejemplo, para establecer el swappiness en 10, podríamos escribir:
sudo sysctl vm.swappiness=10
Output vm.swappiness = 10
Esta configuración se mantendrá hasta el próximo reinicio. Podemos configurar este valor automáticamente al reiniciar agregando la línea a nuestro archivo /etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
En la parte inferior del archivo /etc/sysctl.conf
podemos agregar:
vm.swappiness=10
Guardar y cerrar el archivo cuando hayamos terminado.
Ajuste de la configuración de presión de caché
Otro valor relacionado que quizás quieras modificar es el vfs_cache_pressure
. Esto configura la cantidad de información de inodo y de entrada que el sistema elegirá almacenar en caché en lugar de otros datos.
Básicamente, se trata de datos de acceso sobre el sistema de archivos. Su consulta suele ser muy costosa y se solicita con mucha frecuencia, por lo que es una excelente opción para almacenar en caché en el sistema. Podés ver el valor actual consultando el sistema de archivos proc
:
cat /proc/sys/vm/vfs_cache_pressure
Output 100
Tal como está configurado actualmente, nuestro sistema elimina la información de inodo de la memoria caché demasiado rápido. Podemos configurarlo en un valor más conservador, como 50, escribiendo lo siguiente:
sudo sysctl vm.vfs_cache_pressure=50
Output vm.vfs_cache_pressure = 50
Nuevamente, esto solo es válido para nuestra sesión actual. Podemos cambiarlo agregándolo a nuestro archivo de configuración como hicimos con nuestra configuración swap:
sudo nano /etc/sysctl.conf
En la parte inferior, agregar la línea que especifica su nuevo valor:
vm.vfs_cache_pressure=50
Guardar y cerrar el archivo cuando hayamos terminado.
Video
Para una guía visual paso a paso, asegúrate de ver nuestro video tutorial en el canal de Apuntes IT en YouTube. El video proporciona una referencia visual para complementar este artículo y garantizar que puedas agregar espacio swap en tu VPS sin problemas.
Conclusión
Siguiendo estos pasos obtenemos un margen de maniobra en vps de pocos recursos. El espacio swap puede resultar increíblemente útil para evitar que los programas que necesitan grandes espacios de memoria dejen de funcionar y perjudiquen el normal funcionamiento de nuestro vps.
Si te encontrás con errores OOM (sin memoria) o descubrís que tu sistema no puede utilizar las aplicaciones que necesita, la mejor solución es optimizar las configuraciones de tus aplicaciones o actualizar tu vps con los recursos necesarios.
Gracias por confiar en Apuntes IT. Si tienes preguntas o enfrentas algún problema específico, déjanos un comentario.
Puedes encontrar interesante el artículo de Tu Propio VPS.
Trabajando desde el año 1990 en el mercado de la tecnología. Técnico en Electrónica. Administrador de Sistemas. Administrador de Redes. Técnico en telecomunicaciones. Técnico de plataforma satelital. Incursiono en el Software Libre desde mediados del 1997. Desde entonces utilicé varias distribuciones GNU/Linux comenzando con un RedHat 5.0
Formé parte del Core Team y miembro del grupo de desarrollo del Proyecto UTUTO.