Skip to Content

Como administrar el tamaño de la memoria swap en sistemas GNU/Linux?

Creo que esta es una de las dudas que la mayoria de los administradores tienen al momento de elegir el tamaño de la memoria swap.
Aqui colocare una pequeña guia de como poder administrar dicho espacio de intercambio la cual pueden utilizar como criterio necesario al momento de crear la particion swap.

En informática, el espacio de intercambio es una zona del disco (un fichero o partición) que se usa para guardar las imágenes de los procesos que no han de mantenerse en memoria física. A este espacio se le suele llamar swap, del inglés "intercambiar".

ahora bien con el cambio aplicado en Linux 2.6.31, se mejora la estrategia para decidir qué páginas deben sacarse de RAM cuando hay poca memoria disponible, de tal forma de dejar en memoria física aquellas que se usen intensivamente, eliminando la necesidad de usar el disco.

En el esquema tradicional, la memoria usada por el código se considera como equivalente a la usada por los datos a la hora de copiarlas al disco cuando la memoria es insuficiente. Esto provoca que las aplicaciones detengan temporalmente su ejecución cuando el código que necesitan se encuentra en disco.

Muchos de nosotros hasta hace poco tiempo particionabamos la memoria swap con una formula no standar pero que nos funciona muy bien, ahora cual esta formula?

De acuerdo con OpenBSD FAQ:

Muchas personas siguen una vieja regla de que la partición de intercambio debe ser de dos veces el tamaño de su principal sistema de RAM. Esta regla es una tonterí­a. En un sistema moderno, es una gran cantidad de swap, la mayorí­a de las personas prefieren que sus sistemas no utilizen el espacio de intercambio nunca. Usted no quiere que su sistema nunca se agote la RAM + swap, pero por lo general prefieren tener suficiente memoria RAM en el sistema por lo que no tiene necesidad de swap.

Que significa esto?

  • En pocas palabras si tenemos 2 GB de RAM tendríamos que crear 4 GB para la memoria swap.
  • Si tenemos 64 Gb de RAM teníamos que crear 128 GB para la memoria swap o de intercambio .

Esta formula de utilizar el doble de la memoria RAM para crear la partición swap fue utilizada durante mucho tiempo, pero ahora con las nuevas versiones de núcleo el cual optimiza y mejora el rendimiento de nuestro sistema operativo ya no es necesario utilizar y desperdiciar esa cantidad de espacio en disco.

RedHat nos recomienda lo siguiente:

La memoria swap debe de ser igual a 2x de la memoria RAM física, y adicionalmente 1x de la memoria RAM cuando esta sea mayor a 2GB

Entonces si:

M = RAM en GB, S = swap en GB, entonces

si M < 2
S = M *2
entonces
S = M + 2

  1. Sistemas con 4GB de RAM o menos requieren un mí­nimo de 2 GB de espacio de intercambio (swap).
  2. Sistemas con 4GB a 16GB de RAM, requieren como mí­nimo, 4GB de espacio de intercambio.
  3. Sistemas con 16GB a 64GB de RAM requieren un mí­nimo de 8 GB de espacio de intercambio.
  4. Sistemas con 64GB a 256GB de memoria RAM requieren un mí­nimo de 16 GB de espacio de intercambio.

Para averiguar la utilización del espacio de intercambio podemos ejecutar alguno de los siguientes comandos:

  • cat /proc/swaps
  • swapon -s
  • free -m
  • top
invitrum@maguie:~$ top

top - 13:44:16 up 1 day,  2:29,  3 users,  load average: 0.13, 0.18, 0.22
Tasks: 135 total,   2 running, 132 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4075368k total,  2343688k used,   731680k free,   285476k buffers
Swap:  3947916k total,        0k used,  2947916k free,   579408k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
10260 invitrum  20   0  205m  75m  26m S    1  3.7   0:10.24 firefox-bin        
 3730 root      20   0  131m  67m 8292 S    0  3.3  47:00.66 Xorg               
    1 root      20   0  2088  712  612 S    0  0.0   0:01.32 init               
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd           
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/0        
    4 root      15  -5     0    0    0 S    0  0.0   0:01.58 ksoftirqd/0        
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0         
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.00 migration/1        
    7 root      15  -5     0    0    0 S    0  0.0   0:03.08 ksoftirqd/1        
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/1         
    9 root      15  -5     0    0    0 S    0  0.0   0:02.02 events/0           
   10 root      15  -5     0    0    0 S    0  0.0   0:02.54 events/1           
   11 root      15  -5     0    0    0 S    0  0.0   0:00.00 khelper            
   44 root      15  -5     0    0    0 S    0  0.0   0:00.06 kblockd/0          
   45 root      15  -5     0    0    0 S    0  0.0   0:00.10 kblockd/1          
   47 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpid             
   48 root      15  -5     0    0    0 S    0  0.0   0:00.00 kacpi_notify