Limitare l'uso della cpu con cpulimit



Mi capita spesso di eseguire processi che impegnano molto la cpu. In situazioni di questo tipo il rischio è che la macchina diventi di fatto inutilizzabile fintantoché il processo che sta occupando la cpu non finisce.

Altro rischio è che la cpu si surriscaldi eccessivamente portando il kernel a segnalazioni del tipo:

Jan 21 16:34:04 gundam kernel: [353615.424063] CPU1: Core temperature above threshold, cpu clock throttled (total events = 1)
Jan 21 16:34:04 gundam kernel: [353615.424084] CPU0: Core temperature above threshold, cpu clock throttled (total events = 1)
Jan 21 16:34:04 gundam kernel: [353615.425063] CPU0: Core temperature/speed normal
Jan 21 16:34:04 gundam kernel: [353615.425069] CPU1: Core temperature/speed normal
Jan 21 16:35:29 gundam kernel: [353699.988038] [Hardware Error]: Machine check events logged

Per porre rimedio a questo problema esiste un piccolo programmino da riga di comando il cui nome dice già tutto: cpulimit.

Questo programma agisce sul processo che si vuole limitare fermandolo e riattivandolo in modo che il carico sulla cpu non superi mai la percentuale stabilita.

Se ad esempio stiamo usando ffmpeg, che è notoriamente un programma che usa la cpu in modo intenso, per limitarne l'utilizzo della cpu al 50% eseguiremo:

# cpulimit -P `which ffmpeg` -l 50
Warning: no target process found. Waiting for it...
Process 7468 detected

Come si può vedere non è necessario che il processo (identificato dal suo fullpath) sia già attivo, appena cpulimit ne individua uno inizia a limitarlo.

Il processo da limitare può essere indicato tramite il fullpath, il nome oppure il pid.

gtrev@gundam:~$ cpulimit -h
CPUlimit version 1.7
Usage: cpulimit TARGET [OPTIONS...]
   TARGET must be exactly one of these:
      -p, --pid=N        pid of the process
      -e, --exe=FILE     name of the executable program file
                         The -e option only works when
                         cpulimit is run with admin rights.
      -P, --path=PATH    absolute path name of the
                         executable program file
   OPTIONS
      -b  --background   run in background
      -c  --cpu=N        override the detection of CPUs on the machine.
      -l, --limit=N      percentage of cpu allowed from 1 up.
                         Usually 1 - 200, but can be higher
                         on multi-core CPUs (mandatory)
      -v, --verbose      show control statistics
      -z, --lazy         exit if there is no suitable target process,
                         or if it dies
      -h, --help         display this help and exit
gtrev@gundam:~$

Per installare cpulimit in debian wheezy è sufficiente usare apt:

 # apt-get install cpulimit

Blog: 

Programmazione: 

Aggiungi un commento