Cuando Linux no tiene mas memoria disponible, envía una señal 15(SIGTERM) para detener el o los procesos que cree son los responsable de esta situación y deja en /var/log/messages lineas del tipo:
Dec 11 10:21:43 www kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0) Dec 11 10:21:44 www kernel: __alloc_pages: 0-order allocation failed (gfp=0x1f0/0)
memmon.sh
Script para analizar el uso de memoria en el sistema
#!/bin/bash
echo "BEGIN:" $(date)
echo -e $(uptime) "\n"
free -m
echo
vmstat 1 5
echo
dmesg | diff -u dmesg_default - | grep '^+' | awk '{print "DMESG:" $0}'
dmesg > dmesg_default
echo
ps auxf --width=200
echo -e "END\n"
Instalación
chmod +x /root/memmon.sh
# create a cronjob that runs every few minutes to log the memory usage
echo '0-59/10 * * * * root /root/memmon.sh >> /root/memmon.txt' > /etc/cron.d/memmon
/etc/init.d/cron* restart
# create a logrotate entry so the log file does not get too large
echo '/root/memmon.txt {}' > /etc/logrotate.d/memmon
Interpretación del log
Cada entrada en el log trae las siguientes, lineas:
- BEGIN: fecha
- uptime
free -m
vmstat 1 5
- dmesg
- un listado de todos los procesos del sistema, ps auxf
- END
Interpretar correctamente la salida de los comandos free y vmstat no es algo sencillo, así que antes de hacerlo es mejor leer: http://rimuhosting.com/howto/memory.jsp
