31 oct 2014

Freeswap un script para mantener saludable los caches y swap de tu servidor

Anteriormente habia publicado un post sobre el mismo y otro de freeram, la verdad es que, en un servidor, no vale la pena hacer por separado ambos, asi que elimino el post de freeram y quedara para los desktop nada mas donde no se suele usar swap, pero este, es ideal para server, donde no se libera caches todo el tiempo.
La idea es, explico el script, que libera los cache, luego, se fija si la RAM alcanza para vaciar la swap y dejarla en 0 y en cada cosa que haga nos informa enviando un log a /root/SWAP.log, tambien podriamos enviarlo por mail usando mail -s pero.... se nos llena el mail con algo que no es relevante, si quiere, pueden hacerlo, be free.

#!/bin/bash
#Script for free swap on server, and caches.
#Version 1.0
#Licence GPLv2
#Author: SynFlag, contact me: hackingthesystem4fun@gmail.com, freenode: synflag, or my house 127.0.0.1
#Usage: add to crontab every X time: for example, every day 00:00

sync ; echo 3 > /proc/sys/vm/drop_caches ; sync
mem=$(free  | awk '/Mem:/ {print $4}')
swap=$(free | awk '/Swap:/ {print $3}')

if [ $mem -lt $swap ]; then

        status_swap=̣̣̣`free -m |grep -i Swap | awk '{print $3}'`
        fecha=`date`
        echo "$fecha no se pudo liberar SWAP, falta memoria RAM, el estado de la SWAP es $status_swap usado" >> /root/SWAP.log
        exit 1
fi

status_swap=̣̣̣`free -m |grep -i Swap | awk '{print $3}'`
fecha=`date`

swapoff -a && swapon -a && echo "$fecha se liberaron $status_swap de memoria" >> /root/SWAP.log
Entonces despues solo queda, ejecutar como root:

crontab -e (abre el vim)

y ponemos por ejemplo:

5 0 * * * /usr/bin/freeswap

De mas esta aclarar que eso lleva permiso chmod +x y que lo ejecuta 5 minutos luego de la medianoche.

4 comentarios:

Franz dijo...

También está el truco de Zswap:
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX="zswap.enabled=1"

SynFlag dijo...

Eso es otra cosa: https://www.kernel.org/doc/Documentation/vm/zswap.txt

Esto es para LIMPIAR la swap una vez usada, cosa que a veces no pasa y los caches.

Franz dijo...

Dime bro, cómo puedo automatizar en el /home:
sudo sync && sudo sysctl -w vm.drop_caches=3

Gracias

SynFlag dijo...

En el home?, eso es algo de kernel, o sea del sistema entero.
Podes añadir directamente eso a crontab, no necesita sudo porque por defecto si no especificas usuario corre como root, y listo.