Cómo agregar espacio de intercambio en Ubuntu 20.04

Introducción
Una forma de protegerse contra errores de falta de memoria en las aplicaciones es agregar espacio de intercambio a su servidor. En esta guía, explicaremos cómo agregar un archivo de intercambio a un servidor Ubuntu 20.04.
¿Qué es Swap?
El espacio de intercambio 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 su 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 de intercambio disponible. Es posible tener varios archivos de intercambio o particiones de intercambio, 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 obtiene ningún resultado, significa que su sistema no tiene espacio de intercambio disponible actualmente.
Puedes verificar que no haya ningún intercambio activo usando la free
utilidad:
- free -h
Output total used free shared buff/cache availableMem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714MiSwap: 0B 0B 0B
Como 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, introduzca lo siguiente:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 474M 0 474M 0% /devtmpfs 99M 932K 98M 1% /run/dev/vda1 25G 1.4G 23G 7% /tmpfs 491M 0 491M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 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/7264tmpfs 99M 0 99M 0% /run/user/1000
En este caso, el dispositivo que aparece /
en la Mounted on
columna es nuestro disco. En este ejemplo, tenemos mucho espacio disponible (solo se utilizan 1,4 G). Probablemente, el uso que hagas será diferente.
Aunque existen muchas opiniones sobre el tamaño adecuado de un espacio de intercambio, en realidad depende de sus preferencias personales y de los requisitos de su aplicación. En general, una cantidad igual o el doble de la cantidad de RAM de su 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á utilizando como reserva de RAM.
Paso 3 – Creación de un archivo de intercambio
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 en nuestro directorio swapfile
raíz ( )./
La mejor forma de crear un archivo de intercambio es con el fallocate
programa. 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. Ajústelo para satisfacer las necesidades de su 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 de intercambio
Ahora que tenemos disponible un archivo del tamaño correcto, necesitamos convertirlo en espacio de intercambio.
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.
Haga que el archivo sea accesible sólo para el root escribiendo:
- sudo chmod 600 /swapfile
Verifique el cambio de permisos escribiendo:
- ls -lh /swapfile
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Como puede ver, solo el usuario root tiene habilitadas las funciones de lectura y escritura.
Ahora podemos marcar el archivo como espacio de intercambio escribiendo:
- sudo mkswap /swapfile
OutputSetting 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 de intercambio, permitiendo que nuestro sistema comience a usarlo:
- sudo swapon /swapfile
Verifique que el intercambio esté disponible escribiendo:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
Podemos verificar free
nuevamente la salida de la utilidad para corroborar nuestros hallazgos:
- free -h
Output total used free shared buff/cache availableMem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714MiSwap: 1.0Gi 0B 1.0Gi
Nuestro intercambio se ha configurado correctamente y nuestro sistema operativo comenzará a usarlo según sea necesario.
Paso 5 – Hacer que el archivo de intercambio sea permanente
Nuestros cambios recientes han habilitado el archivo de intercambio para la sesión actual. Sin embargo, si reiniciamos, el servidor no conservará la configuración de intercambio automáticamente. Podemos cambiar esto agregando el archivo de intercambio a nuestro /etc/fstab
archivo.
Realice una copia de seguridad del /etc/fstab
archivo en caso de que algo salga mal:
- sudo cp /etc/fstab /etc/fstab.bak
Agregue la información del archivo de intercambio al final de su /etc/fstab
archivo 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 – Ajuste de la configuración de intercambio
Hay algunas opciones que puedes configurar y que tendrán un impacto en el rendimiento de tu sistema al trabajar con intercambio.
Ajuste de la propiedad Swappiness
El swappiness
parámetro 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 núcleo no intercambiará datos con el disco a menos que sea absolutamente necesario. Recuerde que las interacciones con el archivo de intercambio 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 dice 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
Output60
Para una computadora de escritorio, una configuración de swappiness de 60 no es un mal valor. Para un servidor, es posible que desees acercarlo a 0.
Podemos establecer el swappiness a un valor diferente usando el sysctl
comando.
Por ejemplo, para establecer el swappiness en 10, podríamos escribir:
- sudo sysctl vm.swappiness=10
Outputvm.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 /etc/sysctl.conf
archivo:
- sudo nano /etc/sysctl.conf
En la parte inferior puedes agregar:
/etc/sysctl.conf
vm.swappiness=10
Guarde y cierre el archivo cuando haya terminado.
Ajuste de la configuración de presión de caché
Otro valor relacionado que quizás quieras modificar es el vfs_cache_pressure
. Esta configuración 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. Puede ver el valor actual consultando proc
nuevamente el sistema de archivos:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
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
Outputvm.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 de intercambio:
- sudo nano /etc/sysctl.conf
En la parte inferior, agregue la línea que especifica su nuevo valor:
/etc/sysctl.conf
vm.vfs_cache_pressure=50
Guarde y cierre el archivo cuando haya terminado.
Conclusión
Si sigue los pasos de esta guía, tendrá un margen de maniobra en casos que, de otro modo, darían lugar a excepciones por falta de memoria. El espacio de intercambio puede resultar increíblemente útil para evitar algunos de estos problemas comunes.
Si se encuentra con errores OOM (sin memoria) o descubre que su sistema no puede utilizar las aplicaciones que necesita, la mejor solución es optimizar las configuraciones de sus aplicaciones o actualizar su servidor.
Deja una respuesta