Cómo agregar espacio de intercambio en Ubuntu 22.04

Introducción

Una forma de protegerse contra errores de falta de memoria en las aplicaciones es agregar algo de espacio de intercambio a su servidor. En esta guía, cubriremos cómo agregar un archivo de intercambio a un servidor Ubuntu 22.04.

¿Qué es el intercambio?

El intercambio es una parte del almacenamiento del disco duro que se ha reservado para que el sistema operativo almacene temporalmente datos que ya no puede retener en la RAM. Esto le permite aumentar la cantidad de información que su servidor puede mantener en su memoria de trabajo, con algunas advertencias. El espacio de intercambio en el disco duro se usará principalmente cuando ya no haya suficiente espacio en la RAM para retener los datos de la aplicación en uso.

La información escrita en el disco será significativamente más lenta que la información mantenida en la RAM, pero el sistema operativo preferirá mantener los datos de la aplicación en ejecución en la memoria y usar el intercambio para los datos más antiguos. En general, tener espacio de intercambio como una opción de respaldo cuando la RAM de su sistema se agote puede ser una buena red de seguridad contra excepciones de falta de memoria en sistemas con almacenamiento no SSD disponible.

Paso 1: Verificar el Sistema para Información de Intercambio

Antes de comenzar, podemos verificar si el sistema ya tiene algún espacio de intercambio disponible. Es posible tener varios archivos de intercambio o particiones de intercambio, pero generalmente uno debería ser suficiente.

Podemos ver si el sistema tiene algún intercambio configurado escribiendo:

  1. sudo swapon --show

Si no obtiene ninguna salida, esto significa que su sistema no tiene actualmente espacio de intercambio disponible.

Puede verificar que no hay ningún intercambio activo utilizando la utilidad free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

Como puede ver en la fila de Intercambio de la salida, no hay ningún intercambio activo en el sistema.

Paso 2: Verificar el Espacio Disponible en la Partición del Disco Duro

Antes de crear nuestro archivo de intercambio, verificaremos nuestro uso actual del disco para asegurarnos de tener suficiente espacio. Haga esto ingresando:

  1. 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

El dispositivo con / en la columna Montado en es nuestro disco en este caso. Tenemos mucho espacio disponible en este ejemplo (solo se usan 1.4G). Su uso probablemente será diferente.

Aunque hay muchas opiniones sobre el tamaño apropiado de un espacio de intercambio, realmente depende de tus preferencias personales y los requisitos de tu aplicación. En general, una cantidad igual o doble a la cantidad de RAM en tu sistema es un buen punto de partida. Otra regla práctica es que cualquier cosa por encima de 4 GB de intercambio probablemente sea innecesaria si solo lo estás utilizando como reserva de RAM.

Paso 3: Crear un archivo de intercambio

Ahora que conocemos el espacio disponible en nuestro disco duro, podemos crear un archivo de intercambio en nuestro sistema de archivos. Asignaremos un archivo del tamaño que deseamos llamado swapfile en nuestro directorio raíz (/).

La mejor manera de crear un archivo de intercambio es con el programa fallocate. Este comando crea instantáneamente un archivo del tamaño especificado.

Dado que el servidor en nuestro ejemplo tiene 1 GB de RAM, crearemos un archivo de 1 GB en esta guía. Ajusta esto para satisfacer las necesidades de tu propio servidor:

  1. sudo fallocate -l 1G /swapfile

Podemos verificar que se reservó la cantidad correcta de espacio escribiendo:

  1. ls -lh /swapfile
  1. -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 de intercambio

Ahora que tenemos un archivo del tamaño correcto disponible, necesitamos convertirlo realmente en espacio de intercambio.

Primero, necesitamos bloquear los permisos del archivo para que solo los usuarios con privilegios de root puedan leer el contenido. Esto evita que los usuarios normales puedan acceder al archivo, lo que tendría importantes implicaciones de seguridad.

Haga que el archivo solo sea accesible para root escribiendo:

  1. sudo chmod 600 /swapfile

Verifique el cambio de permisos escribiendo:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Como puedes ver, solo el usuario root tiene los flags de leer y escribir activados.

Ahora podemos marcar el archivo como espacio de intercambio escribiendo:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Después de marcar el archivo, podemos habilitar el archivo de intercambio, permitiendo que nuestro sistema comience a usarlo:

  1. sudo swapon /swapfile

Verifique que el intercambio esté disponible escribiendo:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

Podemos comprobar la salida de la utilidad free de nuevo para corroborar nuestros hallazgos:

  1. 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 intercambio se ha configurado con éxito y nuestro sistema operativo comenzará a utilizarlo según sea necesario.

Paso 5 – Haciendo el Archivo de Intercambio Permanente

Nuestros cambios recientes han habilitado el archivo de intercambio para la sesión actual. Sin embargo, si reiniciamos, el servidor no retendrá automáticamente la configuración de intercambio. Podemos cambiar esto agregando el archivo de intercambio a nuestro archivo /etc/fstab.

Realice una copia de seguridad del archivo /etc/fstab en caso de que algo salga mal:

  1. sudo cp /etc/fstab /etc/fstab.bak

Agregue la información del archivo de intercambio al final de su archivo /etc/fstab escribiendo:

  1. 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: Ajuste de la configuración de su intercambio

Existen algunas opciones que puede configurar y que tendrán un impacto en el rendimiento de su sistema al tratar con el intercambio.

Ajustar la propiedad de “Swappiness”

El parámetro swappiness configura con qué frecuencia su sistema intercambia datos de la RAM al espacio de intercambio. Este es un valor entre 0 y 100 que representa un porcentaje.

Con valores cercanos a cero, el kernel no intercambiará datos al disco a menos que sea absolutamente necesario. Recuerde que las interacciones con el archivo de intercambio son “costosas” en el sentido de que tardan mucho más que las interacciones con la RAM y pueden causar una reducción significativa en el rendimiento. Indicarle al sistema que no dependa mucho del intercambio generalmente hará que su sistema sea más rápido.

Valores que están más cerca de 100 intentarán poner más datos en el intercambio en un esfuerzo por mantener más espacio de RAM libre. Dependiendo del 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 actual de swappiness escribiendo:

  1. cat /proc/sys/vm/swappiness
Output
60

Para un escritorio, un valor de swappiness de 60 no es malo. Para un servidor, es posible que desee acercarlo a 0.

Podemos establecer el swappiness en un valor diferente utilizando el comando sysctl.

Por ejemplo, para establecer el swappiness en 10, podríamos escribir:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

Esta configuración persistirá hasta el próximo reinicio. Podemos configurar este valor automáticamente al reiniciar agregando la línea a nuestro archivo /etc/sysctl.conf:

  1. sudo nano /etc/sysctl.conf

En la parte inferior, puedes agregar:

/etc/sysctl.conf
vm.swappiness=10

Guarda y cierra el archivo cuando hayas terminado.

Ajustar la Configuración de Presión de Caché

Otro valor relacionado que quizás desees modificar es el vfs_cache_pressure. Esta configuración configura cuánto elegirá el sistema cachear la información de inode y dentry sobre otros datos.

Básicamente, esta es la información de acceso sobre el sistema de archivos. Esto generalmente es muy costoso de buscar y se solicita con mucha frecuencia, por lo que es excelente para su sistema cachearlo. Puedes ver el valor actual consultando nuevamente el sistema de archivos proc:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

Como está configurado actualmente, nuestro sistema elimina la información de inode de la caché demasiado rápido. Podemos establecer esto en una configuración más conservadora, como 50, escribiendo:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

Una vez más, esto solo es válido para nuestra sesión actual. Podemos cambiar eso agregándolo a nuestro archivo de configuración como hicimos con nuestro ajuste de swappiness:

  1. sudo nano /etc/sysctl.conf

Al final, añade la línea que especifique tu nuevo valor:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Guarda y cierra el archivo cuando hayas terminado.

Conclusión

Seguir los pasos de esta guía te dará un poco de espacio para respirar en casos que de otra manera llevarían a excepciones por falta de memoria. El espacio de intercambio puede ser increíblemente útil para evitar algunos de estos problemas comunes.

Si te encuentras con errores de OOM (falta de memoria) o si descubres que tu sistema no puede utilizar las aplicaciones que necesitas, la mejor solución es optimizar las configuraciones de tu aplicación o mejorar tu servidor.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04