Cómo hacer que el sistema limíte el uso del procesador de una aplicación.

Enviado por siddharta el 11 Julio, 2009 - 18:38.

kterm.pngidea.png

Una muy buena sugerencia:

Gracias a napi ( http://www.kubuntu-es.org/foro/200907/softwarecomo-limitar-uso-cpu-aplic... ) he leído en Linux para Todos acerca de cpulimit una aplicación que permite limitar a otras aplicaciones, para que no se excedan en el uso del procesador. En mi caso Firefox siempre está al 100%, quizás por las 20 o 30 pestañas que tengo siempre abiertas (me gusta mucho leer).

Instalar:

$ sudo aptitude install cpulimit

Primero se debe ejecutar la aplicación que se sabe que consume muchos recursos, por ejemplo Firefox. Posteriormente es necesario iniciar como root (no, no hay que usar sudo porque no funciona igual):

$ sudo su
[sudo ] password for siddharta:
#

luego se ejecuta el comando así:

# cpulimit -e firefox -l 40 &
[1] 7411
# Process 6034 detected
#

Con el parámetro -e se indicó que el nombre del proceso, y con el parámetro -l se indicó el número 40 que representa el porcentaje límite para uso del procesador. El parámetro & envió la tarea a segundo plano y se le asignó el número de tarea [1] (puede ser distinto) y el número de PID (process identification) 7411 (puede ser distinto). El mensaje final indica que el PID detectado de Firefox es 6034, y se debe presionar Enter.

Finalmente se cierra la sesión de root :

# exit
$

Si por alguna razón se cierra el proceso Firefox, cpulimit automáticamente detectará que ya no existe el proceso y se pondrá en espera de que vuelva a estar en ejecución, así que enviará un mensaje a la consola donde se ejecutó el comando. Es la ventaja de haber usado el nombre del proceso, en vez de haber usado su PID, ya que este último es muy probable que cambie al volverse a ejecutar Firefox.

Cuando se desee detener la tarea (7411) de cpulimit, se le envía la señal -15 (SIGnal TERMinate). Sólo basta recordar el número de la tarea [1] o su número de proceso (PID 7411). No se debe confundir el PID o de lo contrario se mataría el proceso firefox o algún otro:

$ sudo kill -15 7411
[sudo] password for siddharta:

[1]+  Stopped                 sudo cpulimit -e firefox -l 40
$

Nota: La señal -9 (SIGNal KILL) sólo se debe usar cómo último recurso ya que puede dañar el proceso cpulimit o el proceso firefox.

Imagen de kaendesmut
Enviado por kaendesmut el 12 Julio, 2009 - 05:43.

Esta bueno para hacer unos scripts para inicio de sesión eyebrows , y varias cosas más...

Imagen de siddharta
Enviado por siddharta el 13 Julio, 2009 - 01:28.

Sí, y fíjate que si cierras firefox, como en el ejemplo, cpulimit detecta que el nombre del proceso ya no está vigente por lo que se pone en espera .. si vuelves a abrir firefox entonces cpulimit detecta el nombre del proceso y le aplica la restricción, porque realmente la tarea de cpulimit nunca fue finalizada a pesar de que firefox se cerró :)

Imagen de PabliNet
Enviado por PabliNet el 17 Agosto, 2009 - 00:17.

Excelente entrada.

Pero si cierro la consola, ¿CPU Limit sigue funcionando o tengo que dejar la consola abierta todo el tiempo?

Imagen de siddharta
Enviado por siddharta el 17 Agosto, 2009 - 14:43.

Sigue funcionando, recuerda que el parámetro & hizo que se ejecutara el comando como una tarea, independiente de la consola. Haz la prueba, ejecuta el comando y cierra la consola, luego revisa la tabla de procesos con KSysguard o abre nuevamente la consola y usa htop, top o ps aux y verás que sigue ahí.