23nov.2009
Limiter les ressources cpu et bande passante d'un processus

Avec Cpulimit et Trickle
Voici comment limiter la consommation de ressources en cpu et bande passante d'un processus executé sous Linux.
Pour cela nous allons utiliser :
- Cpulimit
- Trickle
Vous trouverez Cpulimit ici : http://sourceforge.net/projects/cpulimit/files/ et Trickle par la : http://monkey.org/~marius/pages/?page=trickle
Pour des tâches lourdes comme une sauvegarde par exemple, très gloutonne en ressources systèmes que ce soit au niveau du réseau ou du processeur, il n'est pas toujours simple de maintenir une disponibilité maximale des services d'un serveur. Grâce à ces deux utilitaires vous aurez la possibilité de brider la quantité de CPU et la bande passante utilisable par le processus et ainsi garder une partie des ressources pour des choses beaucoup plus importante comme un serveur web par exemple.
Avant de vous lancer dans l'installation regardez quand même si ces utilitaires ne sont pas intégré dans votre gestionnaire de paquet.
Installation de Cpulimit :
cd /opt/SOURCES wget http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz tar xvzf cpulimit-1.1.tar.gz cd cpulimit-1.1 make cp -a cpulimit /usr/local/sbin/
Installation de Trickle :
Il vous faudra sûrement installer la libevent (dev et normal).
cd /opt/SOURCES wget http://monkey.org/~marius/trickle/trickle-1.06.tar.gz tar xvzf trickle-1.06.tar.gz cd trickle-1.06 ./configure --prefix=/opt/trickle106 make make install ln -s /opt/trickle106 /opt/trickle
N'oubliez pas de rajouter le chemin vers le binaire trickle dans votre path.
Utilisation de Cpulimit:
Limiter un processus par son nom :
cpulimit -e nom-application -l 30
Limiter un processus par son pid :
cpulimit -p 1120 -l 15
- -p : pid processus.
- -e : nom processus.
- -l : percentage du cpu alloué.
- -P: chemin absolu de l'executable.
- -v : mode verbeux.
Dans le cas d'une machine disposant de deux cpu, comptez alors la limitation comprise entre 0 et 200 % (100% = un cpu),
Cpulimit peut être lancé avant, pour limiter un processus dès son lancement, et ne pas attendre de récupérer son pid ou son nom.
Utilisation de Trickle :
Limiter la vitesse de téléchargement à 15ko/s :
trickle -d 15 wget http://www.system-linux.eu/download.iso
Limiter la vitesse d'upload à 30ko/s :
trickle -u 30 scp /date/test.iso root@10.10.10.1:/data/
Exemple en combinant les deux :
Imaginons que vous avez un rsync à exécuter pour vos sauvegardes, il vous suffira de créer un script contenant :
#!/bin/bash trickle -u 20 rsync -r /data/sauvegarde/ 192.168.10.2::sauvegarde cpulimit -p `pidof rsync` -l 20
Ce qui limitera votre rsync à 20% du cpu et 20 ko/s en upload, la commande pidof sert à trouver le pid d'un programme grâce à son nom.
Attention si votre rsync passe par un vpn, par exemple openvpn : c'est sur openvpn qu'il faudra limiter le cpu.

Commentaires
mardi, novembre 24 2009 | 06:49
Merci de cet excellent et pertinent billet.
mardi, novembre 24 2009 | 07:13
Les commutateurs -e et -P ne fonctionnent pas ! Je vous propose une autre syntaxe. Elle marche !!!
!#/bin/bash
cpulimit -p `ps -C firefox -o pid=` -l 50 &
cpulimit -p `ps -C npviewer.bin -o pid=` -l 50 &
cpulimit -p `ps -C thunderbird -o pid=` -l 25 &
cpulimit -p `ps -C java -o pid=` -l 15 &
cpulimit -p `ps -C amule -o pid=` -l 5 &
exit
mardi, novembre 24 2009 | 08:04
Trickle ne semble pas fonctionner pour les applications en mode X.
mardi, novembre 24 2009 | 10:15
Merci pour tes lumières, c'est rare les personnes qui partagent
mardi, novembre 24 2009 | 18:36
Merci !
Et dans le même ordre d'idée, quelqu'un connais-t-il une méthode pour limiter la consommation mémoire d'un processus ? :p