System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Limiter les ressources cpu et bande passante d'un processus

qos trickle jpeg

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.

Par GanGan | le lundi, novembre 23 2009 07:00

Commentaires

1. Denis

mardi, novembre 24 2009 | 06:49

Merci de cet excellent et pertinent billet.

2. Denis

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

3. Denis

mardi, novembre 24 2009 | 08:04

Trickle ne semble pas fonctionner pour les applications en mode X.

4. gangan

mardi, novembre 24 2009 | 10:15

Merci pour tes lumières, c'est rare les personnes qui partagent :)

5. Romain

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