Inicio / Blog
Publicado el 06 abril 2019

Optimizando la memoria Swap de nuestro servidor

La memoria SWAP (también conocida como espacio de intercambio o memoria virtual) es una partición en nuestro disco duro que se utiliza para almacenar las imágenes de procesos y datos que no es posible almacenar en nuestra memoria física (RAM) por falta de espacio en la misma. Optimizar el uso que nuestro servidor hace de la SWAP es importante para el rendimiento de nuestro sistema, y aquí vamos a ver algunas características principales para hacer un buen uso de ella.

Como todos sabemos, según vamos ejecutando aplicaciones en nuestro servidor, estas van haciendo uso de la memoria RAM. Puede llegar un momento en que nuestra memoria física esté prácticamente llena y esto nos impida continuar ejecutando aplicaciones por falta de espacio en la misma. Aquí es cuando entra en juego la memoria SWAP. A partir de un cierto porcentaje de carga en nuestra RAM, nuestro sistema operativo buscará las imágenes de aquellos procesos que menos utilicemos y los moverá a la memoria SWAP, liberando así espacio de nuestra RAM para poder seguir cargando en ella otras aplicaciones. Esto resulta de gran ayuda, pero cuando hacemos un uso excesivo de la memoria SWAP, teniendo todavía disponible memoria RAM, notaremos cómo nuestro sistema se relentiza. Esto es debido a que la velocidad de consulta de la información que tenemos almacenada en nuestra memoria RAM es muy superior a la velocidad de consulta hacia nuestro disco duro, que es donde se almacena la SWAP.

¿Qué cantidad de SWAP es aconsejable asignar?

Aunque, como se suele decir coloquialmente, cada maestrillo tiene su librillo, normalmente se sigue la siguiente regla para la asignación de la SWAP:

  • En el caso de que nuestro servidor tenga un 1GB de RAM o menos, asignaremos a la SWAP el mismo tamaño que tenga nuestra RAM.
  • Si tenemos entre 2GB y 4GB de RAM, el tamaño de nuestra SWAP será la mitad del tamaño de nuestra RAM,
  • En el caso de que tengamos más de 4GB de RAM, asignaremos a la SWAP el tamaño que deseemos, procurando que nunca sea inferior a 512MB ni superior a 2GB.

Ajustar el uso de la memoria SWAP

En linux, el parámetro «swappiness» nos permite controlar en qué momento nuestro sistema operativo empezará a liberar la carga de la RAM enviado información a la SWAP. El valor de «swappiness» puede ir desde 0 (no se realizará ningún intercambio entre la RAM y la SWAP) hasta 100 (el intercambio se realizará constantemente). Por defecto, «swappines» tiene un valor de 60, que es apropiado para la mayoría de servidores, pero si tenemos un servidor con poca carga de procesamiento, es posible que deseemos reducir el uso de SWAP para aumentar la velocidad de procesado; si por el contrario, tenemos un servidor con alta carga de trabajo (bases de datos de gran tamaño, etc), es posible que deseemos aumentar el uso de SWAP para que la RAM pueda hacer frente a más trabajo.

El siguiente comando nos indicará qué valor tenemos configurado en el parámetro «swappiness»:

[root@srv ~]# cat /proc/sys/vm/swappiness
60

Si deseamos reducir el valor «Swappiness» de 60 a 10:

[root@srv ~]# sysctl -w vm.swappiness=10

Si deseamos aumentarlo, ejecutaremos el mismo comando indicando el valor que deseemos asignarle.

Para conseguir que este cambio sea permanente y se mantenga tras el siguiente reinicio del sistema, abriremos el archivo /etc/sysctl.conf

[root@srv ~]# nano /etc/sysctl.conf

Y editaremos (o añadiremos al final, en caso de que no exista), la siguiente línea con el valor que deseemos:

vm.swappiness=10

Podremos comprobar cómo, tras guardar los cambios, nuestro valor de intercambio se mantiene tras el reinicio del sistema.

¿Cómo saber qué procesos usan la SWAP?

Los comandos «top» y «free» nos ofrecen información acerca de la SWAP utilizada por nuestro servidor, de forma global. Si queremos obtener un listado que especifique cada proceso con su utilización de SWAP, podemos usar el siguiente comando:

[root@srv ~]# for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done

Como la salida de este comando puede ser extensa, con este otro comando podemos obtener el mismo listado paginado:

[root@srv ~]# for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

¿Y si queremos saber únicamente la swap utilizada por un proceso en concreto? Lo primero que haremos será encontrar el ID del proceso, en nuestro ejemplo queremos saber el ID de Exim, y para ello ejecutamos lo siguiente:

[root@srv ~]# pidof exim
30733

Una vez obtenido el número de proceso, con el siguiente comando obtendremos la SWAP que está utilizando:

[root@srv ~]# grep VmSwap /proc/30733/status
VmSwap: 0 kB

Liberando la memoria SWAP que está en uso

Si vemos que todavía tenemos espacio libre en nuestra memoria RAM y nuestra SWAP está siendo utilizada, es posible que queramos vaciar la SWAP y traspasar su contenido a la RAM. Siempre teniendo en cuenta que en la RAM debe quedar espacio suficiente para albergar el espacio que deseamos traspasar desde nuestra SWAP, por supuesto. Podemos vaciar la SWAP con el siguiente comando:

[root@srv ~]# swapoff -a ; sudo swapon -a

Este comando puede tardar un poco en finalizar, todo dependerá del tamaño de los datos que tuviésemos almacenados en nuestra SWAP.

Ahora ya sabemos qué es la SWAP y cómo gestionarla correctamente para optimizar los recursos de nuestro servidor.

 

Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Digg thisBuffer this pageEmail this to someone

Entradas relacionadas:

Rsync: 10 ejemplos prácticos de comandos Rsync Rsync o Remote Sync (Sincronización Remota) es una potente y versátil herramienta que nos permite copiar y sincronizar nuestros datos de forma local y remota entre diferentes directorios, discos y red...
GlusterFS: crea tu almacenamiento distribuido Vivimos en un mundo donde la información está creciendo de forma impredecible y con ello nuestra necesidad de almacenar estos datos de un modo eficiente. Los sistemas de almacenamiento distribuido, do...
Creando un Raid0 para unir dos discos en Linux Si tienes un Servidor Dedicado seguramente estás familiarizado con el término RAID (Redundant Array of Inexpensive Disks) ya que la mayoría de los proveedores de servidores ofrecen sus máquinas con Ra...
Instalando PageSpeed en cPanel Mod_pagespeed es un módulo para el servidor web Apache que optimiza tu web antes de servirla, mejorando bastante el rendimiento y la latencia de la misma. Todos conocemos la importancia de utilizar si...

//
proxAdmin

En ProxAdmin le ofrecemos servicios de administración de servidores, soporte helpdesk externalizado y servicios IT especializados que le permitirán mantener una presencia en internet consistente y segura.

¿Tienes algo que decir?