Cómo impedir el uso del área de intercambio de memoria antes de que se agote la RAM
Es posible que te hayas encontrado con una máquina que se ahoga porque el volcado de datos de la memoria RAM a disco (partición o archivo swap) está consumiendo prácticamente todo el tiempo de procesador.
Si utilizas top
(si el sistema no está completamente ahogado), verás que el proceso kswapd0
está consumiendo cerca del 100% del tiempo de procesador y, aunque la RAM está al 40%, se está haciendo uso de la partición o el archivo de intercambio de memoria (swap).
$ top
top - 10:05:40 up 24 min, 3 users, load average: 12,17, 8,62, 5,53
Tasks: 256 total, 8 running, 248 sleeping, 0 stopped, 0 zombie
%Cpu(s): 46,4 us, 29,4 sy, 0,0 ni, 10,9 id, 11,2 wa, 1,3 hi, 0,8 si, 0,0 st
MiB Mem : 7820,1 total, 101,1 free, 3645,8 used, 4073,2 buff/cache
MiB Swap: 0,0 total, 0,0 free, 0,0 used, 3049,6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
105 root 20 0 0 0 0 R 99,9 0,0 0:15.57 kswapd0
[...]
Esto se debe a que el valor por defecto del parámetro swappiness
está definido en 60 (0 - 100). Para impedir el uso de la swap hasta que se agote la RAM, el valor de swappiness debería ser 1
(usar la swap cuando a la RAM le quede un 1% libre). Si lo que interesa es que no se haga uso de la swap en ningún momento, ni aunque la RAM se agote por completo, el valor de swappiness debería ser 0
.
Comprueba el valor asignado al parámetro swappiness:
$ cat /proc/sys/vm/swappiness
Lo más probable, como decía antes, es que devuelva 60
.
Para cambiar ese valor temporalmente, hasta que se reinicie la máquina:
$ sudo -i
# echo 1 >/proc/sys/vm/swappiness
Si queremos que el cambio sea permanente:
$ sudo sysctl vm.swappiness=0
Fuente: Wikipedia .
Imagen de cabecera de rleathers .