jueves, 4 de agosto de 2011

Terminar un proceso si supera el uso de RAM determinado

votar

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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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:
1
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:
1
./killif.sh PROCID SIZE
Por ejemplo:
1
 
For example: ./killif.sh 132451 100
1
 
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

Fuente:http://www.atareao.es/ubuntu/conociendo-ubuntu/terminar-un-proceso-si-supera-el-uso-de-ram-determinado/

No hay comentarios:

Publicar un comentario