Limitando el uso de CPU con cpulimit

August 24, 2018
cpulimit devops sistemas raspberry-pi

htop cpu

Hace unos días tuve un problema con ffmpeg en unas Raspberry Pi. Resulta que ffmpeg usa toda la CPU disponible, y aún usando el parámetro --threads en mi caso seguía usando el 100% de los 4 núcleos. No seré yo quien diga de que no me gusta aprovechar los recursos, que un proceso está al 100% o cerca no me parece demasiado problema, el problema es cuando la CPU se pone a 84ºC, el límite de la Raspberry Pi.

CPULIMIT

Así que buscando cómo solucionar el problema di con una aplicación de lo mas útil. Para instalarla, al menos en un sistema Debian me ha valido con hacer un sudo apt-get install cpulimit.

Una vez instalada la ejecutamos con cpulimit objetivo -l límite.

Objetivo puede ser tanto un pid de un proceso, el path del ejecutable o el nombre, dependiendo si pasamos el parámetro -p, -P o -e.

Os dejo como ejemplo mi caso de uso:

Tengo 4 núcleos y ffmpeg me pone los 4 al 100%, así que quiero limitarlo a un 25% de uso, pues bien, ejecutaría lo siguiente

cpulimit -e ffmpeg -l 100
  • -e ffmpeg: Es el nombre del proceso que quiero limitar.
  • -l 100: Esto es la limitación, en mi caso va desde el 0, completamente limitado, al 400, que sería sin limitación, siendo 100 por el número de núcleos. 100 sería un cuarto de CPU.

Alguno quizá se pregunte. --¿Esto antes o después de ejecutar el proceso que queremos limitar?-- pues bien, da lo mismo, ya que se quedará a la espera de que se lance o esté lanzado ya el proceso y se pondrá al instante a limitarlo, hasta que paremos cpulimit

Con cpulimit --help podremos ver todas las opciones posibles y con man cpulimit leer el manual (a veces se nos olvida esto). He encontrado algún parámetro interesante, aunque no lo he probado aún.

  • -b: Ejecuta en background.
  • -k: Mata el proceso si supera la carga, en vez de limitarlo.
  • -s: Lanza un signal cuando cerramos cpulimit, por ejemplo que mate el proceso que estaba siendo limitado.

Cualquier duda puedes preguntarme por gnusocial.net.

Fuentes

  • man cpulimit
  • cpulimit --help
comments powered by Disqus