Commande nice sous Linux : définir la priorité, la modifier avec renice et mesurer la part de CPU en cas de concurrence

La commande nice de Linux définit la valeur nice (de -20 à 19), qui détermine la part de CPU qu'un programme cède aux autres lorsqu'il s'exécute. Sur un serveur AlmaLinux 9, deux tâches ont été liées à un seul cœur de CPU et mesurées en faisant varier la valeur nice : le partage n'a eu lieu que lorsqu'elles se disputaient le CPU, et la tâche en nice 19 n'a utilisé que 1,4 %.
Les processus déjà en cours se modifient avec renice, et c'est ionice qui gère la cession du disque. Pour les trois commandes, la sortie présentée est exactement celle obtenue en les exécutant en root et en utilisateur standard.
1️⃣ Commande nice sous Linux : plage de valeurs et part de CPU en cas de concurrence
La valeur nice est un nombre qui fixe à quel point un processus cède sa place quand le temps CPU est partagé ; elle va de -20 à 19. Les programmes s'exécutent normalement à 0, -20 passe en premier et 19 est celui qui cède le plus.
On pourrait croire qu'un nombre plus grand passe en premier, mais c'est l'inverse pour la valeur nice. L'ordonnanceur Linux attribue un poids à chaque valeur nice et répartit le temps CPU selon ce rapport : nice 0 pèse 1024, 10 pèse 110 et 19 pèse 15.
On ne cède sa place que lorsqu'il y a concurrence pour le CPU. S'il reste un CPU libre, même une tâche en nice 19 s'exécute sans attendre. C'est comme les places prioritaires dans le bus : quand elles sont libres, tout le monde s'y assoit, et on ne les cède que lorsque le bus est bondé.
La table des poids est le tableau [sched_prio_to_weight] du code source du noyau Linux [kernel/sched/core.c] ; elle est conçue pour que chaque cran de plus sur la valeur nice réduise le temps CPU d'environ 10 %.
2️⃣ Utilisation de base de nice : +10 sans valeur et valeurs hors plage
Placez une commande après nice pour l'exécuter avec une valeur nice modifiée ; tapé seul, nice affiche la valeur nice du shell actuel.
nice0Dans les exemples ci-dessous, le bash lancé affiche sa propre valeur nice avec [ps -o ni=]. Sans -n, 10 s'ajoute à la valeur actuelle ; avec -n 5, c'est 5.
nice bash -c 'ps -o ni= -p $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5Les valeurs hors plage sont ramenées à la limite sans erreur : -n 50 s'exécute à 19.
nice -n 50 bash -c 'ps -o ni= -p $$' 19Seul root peut faire passer un processus devant avec une valeur négative. Un utilisateur standard reçoit l'avertissement [cannot set niceness] et la commande s'exécute quand même en nice 0.
# en utilisateur standard
nice -n -5 bash -c 'ps -o ni= -p $$'nice: cannot set niceness: Permission denied
0# en root
nice -n -5 bash -c 'ps -o ni= -p $$' -5Les processus enfants lancés par une commande exécutée avec nice tournent eux aussi avec la même valeur nice.
nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!' 7Ainsi, si vous lancez un script avec nice, toutes les commandes qu'il contient cèdent leur place.
3️⃣ renice : modifier la valeur nice d'un processus en cours
nice ne fixe la valeur qu'au lancement : pour un processus déjà en cours, on utilise renice. Vérifiez d'abord le PID et la valeur actuelle dans la colonne NI de top ou avec ps.
ps -o pid,ni,cmd -p 201643 PID NI CMD
201643 5 sleep 600renice -n 10 -p 201643201643 (process ID) old priority 5, new priority 10Comme le montre la sortie, renice -n n'ajoute rien à la valeur actuelle mais la fixe à la valeur indiquée : on obtient 10, et non 5 + 10 = 15. Ce n'est pas comme appuyer sur ▲ sur la télécommande de la climatisation pour monter d'un cran, mais comme régler la température souhaitée sur 24 degrés.
La documentation officielle d'util-linux décrit elle aussi -n comme une valeur absolue ; l'ajout relève de l'option [--relative] des versions récentes. util-linux 2.37.4, la version testée, ne disposait pas de cette option.
Un utilisateur standard peut seulement augmenter la valeur de ses propres processus et ne peut plus la baisser une fois augmentée.
# en utilisateur standard
renice -n 10 -p 201649201649 (process ID) old priority 0, new priority 10renice -n 5 -p 201649renice: failed to set priority for 201649 (process ID): Permission deniedroot peut aussi la baisser ; dans le même test, 10 est passé directement à 3.
🔲 Simulateur nice · renice
Dans le simulateur ci-dessous, connecté en utilisateur standard, vous pouvez taper nice et renice vous-même et voir la valeur nice changer.
4️⃣ Mesure de la part de CPU en cas de concurrence : nice 0 vs 0·10·19
Augmenter la valeur nice ne ralentit pas toujours la tâche. Sa part ne diminue que lorsqu'elle est en concurrence avec une autre tâche pour le même CPU.
Deux tâches ont été liées à un seul cœur de CPU (taskset) et ont exécuté en même temps le script ci-dessous, qui compte de un en un pendant 5 secondes. Plus le nombre atteint est élevé, plus la tâche a utilisé de temps CPU.
#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $nLe script incrémente n de 1 jusqu'à ce que 5 secondes se soient écoulées, puis affiche la valeur finale.
Deux tâches en nice 0 se sont partagé le temps à parts égales, nice 10 en a utilisé environ 10 % et nice 19 seulement 1,4 %. C'est conforme aux rapports calculés à partir des poids du noyau (1024 : 110 donne 90,3 : 9,7, et 1024 : 15 donne 98,6 : 1,4).
Lancée seule sur le même cœur, la tâche en nice 19 a compté environ 650 000 à 1 140 000 fois en 5 secondes. Sans personne à qui céder, même nice 19 utilise pleinement le CPU ; la charge du serveur (load average) était de 3 à 5 pendant le test.
5️⃣ ionice : céder le disque et vérifier l'ordonnanceur
nice ne fixe que la part de CPU : pour les tâches qui lisent et écrivent longtemps sur le disque, comme les sauvegardes, on cède aussi son tour sur le disque avec ionice. Avec -c3 (idle), la tâche n'est servie que lorsqu'aucun autre programme n'utilise le disque.
ionice -c3 bash -c 'ionice -p $$'idleionice -p $$none: prio 0Un processus sans classe définie s'affiche comme [none] ; selon la documentation du noyau, il est traité en best-effort et sa priorité est calculée à partir de la valeur nice du CPU.
Les classes ionice n'ont d'effet que si l'ordonnanceur du disque les prend en charge ; la documentation du noyau cite bfq et mq-deadline comme ordonnanceurs compatibles. Celui affiché entre crochets est l'ordonnanceur en service.
cat /sys/block/nvme0n1/queue/scheduler[none] mq-deadline kyber bfqLe disque NVMe du serveur de test utilise [none] : selon la documentation officielle, ionice peut donc rester sans effet, et l'effet n'a pas été mesuré séparément. Le nom du disque se vérifie avec lsblk.
6️⃣ Où utiliser nice : sauvegardes · cron · wp-cli
Ajoutez nice aux tâches longues mais pas urgentes. La compression d'une sauvegarde sollicite à la fois le CPU et le disque : on indique donc nice et ionice ensemble.
nice -n 19 ionice -c3 tar czf backup.tgz /home/exampleSi une tâche déjà en cours ralentit le serveur, repérez son PID dans top puis augmentez sa valeur avec renice ; pour les tâches cron quotidiennes, placez nice devant la commande.
0 3 * * * nice -n 10 /usr/local/bin/backup.shSur un serveur WordPress, si vous lancez de grosses tâches wp-cli comme un rechercher-remplacer ou la régénération des images avec nice -n 10, c'est php-fpm, qui traite les requêtes des visiteurs, qui obtient le CPU en premier quand il est occupé.
nice -n 10 wp media regenerate --yesÀ l'inverse, n'augmentez pas la valeur nice de php-fpm ni du serveur web lui-même. Si les processus qui répondent aux visiteurs cèdent leur place, les pages répondent plus lentement quand le CPU est occupé.
🔢 FAQ & contenus recommandés









ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.
