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.
crontab -e (abre el vim)
y ponemos por ejemplo:
De mas esta aclarar que eso lleva permiso chmod +x y que lo ejecuta 5 minutos luego de la medianoche.
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:#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
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.
También está el truco de Zswap:
ResponderEliminarsudo nano /etc/default/grub
GRUB_CMDLINE_LINUX="zswap.enabled=1"
Eso es otra cosa: https://www.kernel.org/doc/Documentation/vm/zswap.txt
ResponderEliminarEsto es para LIMPIAR la swap una vez usada, cosa que a veces no pasa y los caches.
Dime bro, cómo puedo automatizar en el /home:
ResponderEliminarsudo sync && sudo sysctl -w vm.drop_caches=3
Gracias
En el home?, eso es algo de kernel, o sea del sistema entero.
ResponderEliminarPodes añadir directamente eso a crontab, no necesita sudo porque por defecto si no especificas usuario corre como root, y listo.