Per limitare l’utilizzo della cpu sui sistemi linux è possibile usufruire dell’utility CPULIMIT.
- Installazione Cpulimit
Debian/Ubuntu
[email protected]:~$ sudo apt-get install cpulimit
CentOS 6
Prima di tutto installare il repository EPEL seguendo le istruzioni di questo articolo (REMI non è necessario):
http://www.homelab.it/index.php/2014/05/20/come-installare-i-repositories-epel-e-remi-su-centos-6
Una volta acquisito il repository, installare cpulimit:
[[email protected] ~]# yum install cpulimit
- Test Cpulimit
Per spiegare il funzionamento di cpulimit nel migliore dei modi, utilizzerò uno script bash che creerà loop fino a portare la CPU al limite.
Tramite editor creare un file dal nome loop.sh e srivere:
#!/bin/bash
while true
do
:;
done
Salvare il file e renderlo eseguibile:
[[email protected] ~]# chmod +x loop.sh
Eseguire lo script in background:
[[email protected] ~]# ./loop.sh &
[1] 8928 <-- Numero pid processo
[[email protected] ~]#
Controllare l’utilizzo della cpu da parte dello script loop.sh:
[[email protected] ~]# top
top - 23:05:08 up 6 days, 12:44, 1 user, load average: 0.51, 0.64, 0.36
Tasks: 100 total, 2 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 33.3%us, 0.1%sy, 0.0%ni, 66.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2979068k total, 2825512k used, 153556k free, 424712k buffers
Swap: 1675256k total, 47504k used, 1627752k free, 2170224k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8928 root 20 0 5060 1144 1012 R 100.0 0.0 7:01.62 loop.sh
Come si può notare lo script sta spremendo il processore al massimo.
Per limitare l’utilizzo al 30% tramite cpulimit, individuare il numero pid del processo e scrivere:
[[email protected] ~]# cpulimit -l 30 -p 8928 &
[2] 8956
Process 8928 detected
[[email protected] ~]#
Ricontrollare lo stato del processo per confermare l’applicazione del limite:
[[email protected] ~]# top
top - 23:09:34 up 6 days, 12:48, 1 user, load average: 0.39, 0.60, 0.42
Tasks: 101 total, 1 running, 99 sleeping, 1 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.3%ni, 99.5%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2979068k total, 2825140k used, 153928k free, 424712k buffers
Swap: 1675256k total, 47504k used, 1627752k free, 2170224k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8928 root
Per terminare l’utilizzo di cpulimit basta cercare il numero pid ed eseguire il comando kill:
[[email protected] ~]# ps aux | grep cpulimit
root 8956 0.0 0.0 2184 576 pts/0 S< 23:07 0:00 cpulimit -l 30 -p 8928
root 8960 0.0 0.0 4364 744 pts/0 S+ 23:12 0:00 grep cpulimit
[[email protected] ~]# kill -9 8956
[2]- Killed cpulimit -l 30 -p 8928
[[email protected] ~]#
Tengo a precisare che al momento dell’esecuzione di cpulimit è possibile specificare anche il nome dell’esegubile, a discapito del numero pid, con lo switch: -e nomeprocesso
(La procedura è compatibile sia su CentOS6, Ubuntu e Debian)