Cómo configurar la memoria Swap en Ubuntu 18

Vamos a revisar por qué puede ser necesario configurar un espacio de intercambio y cómo configurar la memoria swap en Ubuntu 18.

 

Comenzaremos con un repaso acerca de qué es la swap y para qué sirve la memoria de intercambio, además repasaremos cuestiones cómo ¿qué tipo de swap elegir (partición o fichero) ?, ¿cual es la cantidad de swap recomendable en cada equipo según la RAM instalada?, ¿cómo habilitar y utilizar la swap? y ¿cómo comprobar la swap en uso en el sistema?.

 

 
En este artículo:

 

 

 

 

 

 

 

 

Qué es la swap en Linux y para qué sirve el espacio de intercambio

 

Podemos crear una partición de swap o un fichero de intercambio.

El uso de memoria swap (memoria de intercambio) puede mejorar el rendimiento de un equipo en casos de falta de memoria. Al asignar un espacio de intercambio para almacenar datos, este espacio será utilizado por el sistema en casos en que no pueda conservar los datos en la RAM.

 

 

El uso de swap puede favorecer el rendimiento del equipo, sobre todo si se trata de un equipo con poca RAM.

Podemos utilizar archivos de intercambio o utilizar una partición como partición para swap.

Aquí podemos ver los discos del sistema y las particiones, donde podemos ver una partición de swap, con el gestor de discos de gnome:

 

 

discos de gnome, es una utilidad de gnome en ubuntu 18 :

 

Y aquí vemos un ejemplo de partición de swap:

 

 

 

¿es mejor una partición de swap o fichero de swap?

 

En principio el uso de una partición de intercambio o de un fichero de intercambio ofrece el mismo rendimiento.

Aunque discutiendo los detalles técnicos, muchos expertos siguen prefiriendo el uso de una partición swap frente a un fichero de swap, ya que un fichero de swap podría fragmentarse si el sistema de archivos subyacente se sobrecarga, pero una partición de swap es un sistema de archivos de intercambio en si mismo, y no está expuesto a esa fragmentación

También tenemos que tener en cuenta que una partición de swap es menos flexible que el uso de un fichero de swap, algo que podemos notar si nuestras necesidades de swap varían. Es decir, que si tienes una partición swap, es probable que el rendimiento sea un poquitín mayor, pero sin embargo, si quieres modificar el tamaño de la partición, no será una operación tan rápida como sería el cambio de tamaño de un fichero de swap. En la práctica yo he notado mejor rendimiento utilizando una partición swap.

También es recomendable crear la swap al principio del disco, eso mejorará el rendimiento, ya que el acceso al disco es más rápido al principio del disco.

En resúmen, si no tienes suficiente RAM, la swap puede aumentar el rendimiento del equipo, y una partición swap es probablemente la mejor opción en cuanto al rendimiento, aunque un archivo de intercambio es más flexible y puede modificarse más rápidamente si lo necesitas.

 

 

¿Cuanta swap necesito?

 

En principio existe una “regla” que podemos aplicar a la hora de configurar la cantidad de swap necesaria en un equipo Ubuntu.

 

–> Si utilizas un server normal (Servidor Web/Mail, etc ..) :

Si tienes menos de 2Gb de RAM –> Swap de igual tamaño que la RAM

Si tienes más de 2Gb de RAM  –> Swap de 2 Gb.

 

–> Por otra parte en la ayuda oficial de Ubuntu comentan acerca de la swap la regla siguiente :

Si tienes un equipo con 1Gb de RAM –> Swap de igual tamaño que la RAM

Si tienes un equipo moderno, con más de 1Gb de RAM, y utilizas Hibernación –> Swap de tamaño igual que la RAM como mínimo.

 

Podemos tomar como base esta tabla  para configurar la cantidad de swap adecuada que Ubuntu:

 

  • 4 Gb de RAM, sin Hibernación —> Swap de 2 Gb
  • 4 Gb de RAM, con Hibernación —> Swap de 6 Gb

 

  • 8 Gb de RAM, sin Hibernación —> Swap de 3 Gb
  • 8 Gb de RAM, con Hibernación —> Swap de 11 Gb

 

  • 16 Gb de RAM, sin Hibernación —> Swap de 4 Gb
  • 16 Gb de RAM, con Hibernación —> Swap de 20 Gb

 

 

–> Sin embargo, si nos vamos a Red Hat o CentOS, la cantidad de swap recomendada según la RAM cambia:

  1. Los sistemas con 4GB a 16GB de RAM requieren un mínimo de 4GB de espacio de intercambio
  2. Los sistemas con 16 GB a 64 GB de RAM requieren un mínimo de 8 GB de espacio de intercambio

 

 

Comprobar si el sistema tiene configurado un espacio de intercambio

Comprobamos si el sistema tiene configurado algún espacio de intercambio con el comando free y con el comando swapon

 

En este caso podemos ver que tenemos una partición swap habilitada, de 1G, con prioridad de swap -2,
y además un fichero de intercambio de 5Gigas:

usuario1@Ubuntu18:~$ sudo swapon --show
[sudo] contraseña para usuario1:
NAME TYPE SIZE USED PRIO
/swapfile file 5G 301,7M -3
/dev/dm-2 partition 980M 945M -2

 

 

 

 

 

Comprobar si tenemos una partición de swap

Con el comando parted podemos comprobar si existe una partición asignada para intercambio:

usuario1@Ubuntu18:~$ sudo parted --list
[sudo] contraseña para usuario1:
Modelo: ATA SanDisk SSD PLUS (scsi)
Disco /dev/sda: 480GB
Tamaño de sector (lógico/físico): 512B/512B
Tabla de particiones: msdos
Indicadores de disco:
 
Numero Inicio Fin Tamaño Tipo Sistema de archivos Banderas
1 1049kB 768MB 767MB primary ext4 arranque
2 769MB 480GB 479GB extended
5 770MB 240GB 239GB logical
 
Modelo: Asignador de dispositivos de Linux (linear) (dm)
Disco /dev/mapper/ubuntu--vg-swap_1: 1028MB
Tamaño de sector (lógico/físico): 512B/512B
Tabla de particiones: loop
Indicadores de disco:
 
Numero Inicio Fin Tamaño Sistema de archivos Banderas
1 0,00B 1028MB 1028MB linux-swap(v1)

 

 

 

Comprobar el uso de memoria swap

Previamente hemos comprobado que teníamos una partición de intercambio, con el comando “swapon” (el fichero de intercambio lo hemos creado después; lo veremos más adelante).

Para comprobar el uso de la swap en el equipo también podemos utilizar el comando “free“, que consulta la información el el fichero /proc/meminfo

y utilizamos el parámetro -h para mostrar  la información en modo “human readable” (más facil y rápido de ver y comprender de un vistazo):

usuario1@Ubuntu18:~$ free -h
total usado libre compartido búfer/caché disponible
Memoria: 5,6G 3,7G 736M 557M 1,2G 1,1G
Swap: 979M 945M 34M

Así vemos que tenemos un espacio de 1G para memoria swap, y 945M utilizados.
 

 

También podemos comprobar el uso de la swap en el fichero:

usuario1@Ubuntu18:~$ cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-2 partition 1003516 1003516 -2
/swapfile file 5242876 19456 -3

 

usuario1@Ubuntu18:~$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-2 partition 980M 980M -2
/swapfile file 5G 19M -3

 

 

 

Crear un fichero de swap

 
Lo primero evidentemente es comprobar el espacio libre en el disco;

lo hacemos con el comando df -h

 

usuario1@Ubuntu18:~$ df -h
S.ficheros Tamaño Usados Disp Uso% Montado en
udev 2,8G 0 2,8G 0% /dev
tmpfs 575M 2,0M 573M 1% /run
/dev/mapper/ubuntu--vg-root 218G 26G 181G 13% /
tmpfs 2,9G 183M 2,7G 7% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 2,9G 0 2,9G 0% /sys/fs/cgroup
/dev/sda1 704M 166M 487M 26% /boot
tmpfs 575M 16K 575M 1% /run/user/121
tmpfs 575M 60K 575M 1% /run/user/1000

 

En este caso comprobamos que tenemos bastante espacio en /

 

Cuando nos aseguremos de tener espacio libre suficiente, creamos un fichero /swapfile en el directorio /root

 

sudo fallocate -l 5G /swapfile

Como nuestra RAM es poca (tenemos menos de 8 G) , entonces igualamos la swap a la RAM.

En este caso hemos creado un fichero swap de 5 Gigas, ya que tenemos 6 Gigas de memoria RAM, y ya tenemos una partición de intercambio de 1 Giga de tamaño. Así que 1G de partición swap que ya teníamos, más un fichero de intercambio de 5G, es igual a 6 G, la misma cantidad de RAM que tenemos en este equipo con pocos recursos.

Vemos que el fichero se ha creado correctamente, y con la cantidad correcta de espacio asignado:

usuario1@Ubuntu18:~$ ls -lha /swapfile
-rw-r--r-- 1 root root 5,0G oct 23 22:51 /swapfile

 

 

Habilitar el archivo de intercambio

 
Ya tenemos el fichero de intercambio creado, y ahora lo habilitaremos para swap.

Lo primero le otorgamos permisos al fichero, para que root pueda leer y escribir en el fichero:

usuario1@Ubuntu18:~$ sudo chmod 600 /swapfile

 

comprobamos los permisos:

usuario1@Ubuntu18:~$ ls -lh /swapfile
-rw------- 1 root root 5,0G oct 23 22:51 /swapfile

 

 

Marcamos el fichero como espacio de intercambio:

sudo mkswap /swapfile
usuario1@Ubuntu18:~$ sudo mkswap /swapfile
mkswap: /swapfile: permisos 0644 no seguros; se sugiere 0600.
Configurando espacio de intercambio versión 1, tamaño = 5 GiB (5368705024 bytes)
sin etiqueta, UUID=597987aa-4ae9-4042-93c4-5751ef6913fd

 

Y finalmente activamos el espacio de intercambio swap:

sudo swapon /swapfile

 

Y ahora verificamos que el intercambio está disponible:

usuario1@Ubuntu18:~$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-2 partition 980M 921,8M -2
/swapfile file 5G 343M -3

 

y revisamos de nuevo con el comando free

usuario1@Ubuntu18:~$ free -h
total usado libre compartido búfer/caché disponible
Memoria: 5,6G 3,6G 776M 651M 1,3G 1,2G
Swap: 6,0G 1,2G 4,7G

 

 
—> Ahora editamos el fichero /etc/fstab para configurar el intercambio swap de forma permanente, y el fichero de intercambio se mantenga en cada reinicio del sistema.

Añadimos :

/swapfile swap swap defaults 0 0

Y si reiniciamos, comprobamos de nuevo la swap en funcionamiento y veremos que se encuentra activo el fichero de swap.
 

 

Eliminar un fichero de intercambio swap

 

Primero desactivamos el fichero de swap:

usuario1@Ubuntu18:~$ sudo swapoff -v /swapfile
swapoff /swapfile

 

Eliminamos las líneas de /etc/fstab referentes al fichero de intercambio:

usuario1@Ubuntu18:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
UUID=42cbeefc-68d9-4823-b57f-3defb293453e /boot ext4 defaults 0 2
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
/swapfile none swap sw 0 0

 

 

Y finalmente eliminamos el fichero de intercambio:

sudo rm /swapfile

 

 

Cómo ajustar la propiedad swappiness para ajustar la frecuencia de intercambio

 

El valor swappiness define la frecuencia con que el sistema utilizará el espacio de intercambio.

Es un valor que podemos configurar en el fichero

cat /proc/sys/vm/swappiness

 
Podemos comprobar el valor configurado de la swap para realizar intercambio

usuario1@Ubuntu18:~$ cat /proc/sys/vm/swappiness
60

Por defecto en Ubuntu estará en 60

 

Podemos modificar el valor con

sudo sysctl vm.swappiness=40

Esto cambia el valor hasta que el equipo se reinicie

 

si queremos hacer permanente el cambio, tenemos que editar el fichero

sudo vi /etc/sysctl.conf

 

 

Modificar la presión de caché (vfs_cache_pressure)

 
Este valor configura la medida en que el sistema elige guardar datos de inodos y entradas de directorio, es decir, está directamente relacionado con datos de acceso sobre el sistema de archivos.
 
Podemos comprobar la configuración actual que tiene el sistema comprobando el contenido del fichero:

usuario1@Ubuntu18:~$ cat /proc/sys/vm/vfs_cache_pressure
50

 

Podemos modificarlo con

usuario1@Ubuntu18:~$ sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

 

Pero para hacerlo un cambio permanente, editamos el fichero:

sudo vi /etc/sysctl.conf

Y al final del fichero añadimos el valor deseado:

vm.vfs_cache_pressure=50

 

 

CONCLUSIÓN

 
Si tienes un equipo Linux con poca memoria RAM, la memoria swap o espacio de intercambio puede aumentar notablemente el rendimiento del ordenador. También es importante saber jugar con la configuración adecuada de la propiedad swappiness y con la presión de caché.