Esporádicamente y en función de la carga de nuestro servidor es posible que la memoria SWAP se empiece a usar.
Si en nuestro caso no se libera la memoria SWAP y lo tenemos controlado, veamos un ejemplo y caso para realizar dicha limpieza:
[root@node01 ~]# top -c d1
top - 10:15:56 up 13 days, 29 min, 3 users, load average: 0.06, 0.03, 0.00
Tasks: 136 total, 1 running, 134 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.5 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3909.7 total, 3012.8 free, 619.1 used, 277.8 buff/cache
MiB Swap: 512.0 total, 115.0 free, 397.0 used. 31.7 avail Mem
Vamos a crear y ejecutar el siguiente script que nos va a permitir liberar memoria SWAP siempre que tengamos previamente memoria física:
#!/bin/bash
free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"
CLEAN_CACHE(){
#Free pagecache, dentries and inodes in cache memory
sync; echo 3 > /proc/sys/vm/drop_caches
#Free dentries and inodes
sync; echo 2 > /proc/sys/vm/drop_caches
#Free pagecache only
sync; echo 1 > /proc/sys/vm/drop_caches
}
if [[ $used_swap -eq 0 ]]; then
echo "No swap is in use"
elif [[ $used_swap -lt $total_free ]]; then
echo "Freeing swap..."
sudo swapoff -a
sudo swapon -a
CLEAN_CACHE
else
echo "Not enough free memory"
fi
Como se observa, ya no tenemos SWAP utilizada y la memoria física utilizada sigue siendo la misma
[root@node01 ~]# top -c d1
top - 10:27:43 up 13 days, 41 min, 3 users, load average: 0.01, 0.01, 0.00
Tasks: 136 total, 1 running, 134 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 5.7 sy, 0.0 ni, 91.4 id, 2.9 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3909.7 total, 2741.5 free, 960.3 used, 207.9 buff/cache
MiB Swap: 512.0 total, 512.0 free, 0.0 used. 238.3 avail Mem