Terminar un proceso si supera el uso de RAM determinado

Introducción

Al leer sobre este script, me pareció realmente interesante, no solo para el caso de estar probando aplicaciones y que de repente comience a consumir toda la memoria RAM, hasta conseguir que tu escritorio sea completamente inutilizable. No termino de entender, porque las aplicaciones como Thunderbird, Chromium o Firefox, empiezan a consumir RAM, y siguen y siguen, de una manera sorprendente, sin parar, es lo que se podría denominar como gula por la RAM. Esto puede llevar a que en un momento determinado, a que tu máquina se comporte como un verdadero dinosaurio, y hacer cualquier suponga una verdadera odisea, vamos que lo de Ulises se quedaría a la altura del betún.

Este script lo que hace es monitorizar los procesos que hay en marcha, de forma que si alguno de ellos supera una cantidad de RAM, automáticamente la mata. Esto evidentemente tiene el inconveniente que te puedes imaginar, justo en el momento más inoportuno cuando estás escribiendo el correo electrónico, o estás viendo alguna página realmente interesante, se active este proceso y lo mate. Esto se podría solucionar haciendo que antes de matar el proceso, te informara de ello y en caso afirmativo lo mate, y si no espere un tiempo prudencial y te lo vuelva a preguntar.

Hay otro inconveniente, y es que por ejemplo en el caso de Chromium, no se lanza un único proceso, sino que se lanzan varios, sería interesante poder contemplar, no de forma individual sino, quizá también la suma de todos ellos. Esto al igual, que en el caso anterior, podría realizarse mediante una batería de preguntas, donde primero te preguntara si mata todos los procesos, y en caso negativo, te vaya preguntando porque procesos quieres que mate, hasta alcanzar la cantidad de RAM deseada.

Vamos se trata de dos opciones adicionales que creo que pueden ser muy interesantes.

El script

El script sería el siguiente, simplemente lo copias y lo guardas como «killif.sh» (por ejemplo) en /usr/bin, dandole permisos de ejecución:

#!/bin/sh

if [ $# -ne 2 ];
then echo "Invalid number of arguments"
exit 0
fi

while [ 1=1 ];
do

SIZE=`pmap $1|grep total|cut -d" " -f13`
SIZE=${SIZE%%K*}
SIZEMB=$(($SIZE/1024))
echo "Process id ="$1" Size = "$SIZEMB" MB"
if [ $SIZEMB > $2 ];
then echo "SIZE has exceeded.\nKilling the process......"
`kill -9 $1`
echo "Killed the process"
exit 0
else
echo "SIZE has not yet exceeding"
fi

sleep 10
done

Le damos precisos de ejecución:

chmod +x killif.sh

Utilizando el script

Para utilizar el script, simplemente abrimos un terminal, y sustituimos PROCID por el proceso que queremos controlar y SIZE por el tamaño máximo que puede utilizar de RAM en MB:

./killif.sh PROCID SIZE

Por ejemplo:

./killif.sh 132451 100

En este caso el script mataría el proceso con ID 132451 si se superan los 100 MB de RAM

Hay que tener mucho cuidado a la hora de emplear este script, dado que si este proceso tiene un comando de apagar la máquina, lo hará.

Conclusión

Como punto de partida se trata de un script interesante, que nos puede ayudar considerablemente, y evitar que en un momento determinado nos quedemos completamente bloqueados por que una aplicación se ha apoderado por completo de la RAM, impidiendo que podamos trabajar con nuestra máquina.

Desde luego, tenemos que tener muy en cuenta las observaciones, porque el remedio puede ser peor que la enfermedad, teniendo en cuenta que nos podemos encontrar con que nos cierra la aplicación en el momento más inoportuno, o que incluso nos apaga la máquina.

Más información | Ask Ubuntu

3 comentarios en “Terminar un proceso si supera el uso de RAM determinado

  1. -
    - hace 13 años

    No quieres acabarlo tu, con todos los aportes posibles que has nombrado?

    Porcierto, existe una aplicacion llamada Sentinela que es bastante completa con la que se podria hacer lo mismo (y mas), GRAFICAMENTE.

  2. MI
    Miquel Mayol i Tur hace 13 años

    Yo lo que mato es la cache ram con
    sudo susync; echo 3 > /proc/sys/vm/drop_caches- la monitorizo en gnome2 con el monitor del sistema en el panel -Aunque hay un script que a mi no me funciona que debería hacer lo mismo#!/bin/bashclearsyncsu -c «echo 3 > /proc/sys/vm/drop_caches»exit Si pudieses publicar una modificación del script que publicas para matar la RAM cache -lo que no te ocasiona problema alguno con lo que estés ejecutando – con por ejemplo RAM + cache RAM > 90% total RAM para incorporarlo al sistema por defecto te lo agradecería muchísmo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *