Comando nice di Linux: impostare la priorità, cambiarla con renice e misurare la quota di CPU in competizione

Informativa sull'affiliazione v3.1
Informativa sull'affiliazione v3.2 (solo mobile)
Ambiente di testFamiglia RHELAlmaLinux 9.8root · account utente normaleControllato il 17/10/2026

Il comando nice di Linux imposta il valore nice di un programma (da -20 a 19), che decide quanta CPU cede agli altri processi mentre gira. Le misure su un server AlmaLinux 9, con due attività vincolate a un solo core e il valore nice cambiato a ogni prova, hanno mostrato che la CPU veniva divisa solo quando le attività se la contendevano, e l'attività con nice 19 usava solo l'1,4%.

I processi già in esecuzione si cambiano con renice, e ionice si occupa di cedere il passo sul disco. Per tutti e tre i comandi l'output è esattamente quello stampato eseguendoli come root e come utente normale.

1️⃣ Comando nice di Linux: intervallo di valori e quota di CPU in competizione

Il valore nice è un numero che stabilisce quanto un processo cede quando il tempo di CPU viene diviso, e va da -20 a 19. I programmi girano di norma a 0; -20 viene servito per primo e 19 cede di più.

Viene facile pensare che un numero più alto venga servito prima, ma i valori nice funzionano al contrario. Lo scheduler di Linux assegna un peso a ogni valore nice e divide il tempo di CPU in quella proporzione: nice 0 vale 1024, 10 vale 110 e 19 vale 15.

Cedere il passo succede solo quando le attività si contendono la CPU. Se c'è una CPU libera, anche un'attività con nice 19 gira senza aspettare. È come i posti riservati sull'autobus: se sono liberi chiunque si siede, e si cede il posto solo quando l'autobus è pieno.

🧭 Valori nice con CPU libera vs. contesa
Diagramma esplicativo
🖥️ CPU
⚖️ Attività B
🖥️ C'è una CPU libera, quindi ogni attività ha il suo core🖥️ Due attività condividono un core
Attività Anice 0 · peso 1024
100%50.0%90.3%98.6%
Attività Bnice 0 · peso 1024nice 10 · peso 110nice 19 · peso 15
100%50.0%9.7%1.4%
Con CPU in avanzo non c'è nessuno a cui cedere, quindi l'attività B usa la CPU per intero qualunque sia il suo valore nice.
Quando si contendono lo stesso core, due attività nice 0 con lo stesso peso dividono a metà il tempo di CPU.
nice 10 ha peso 110, circa un nono di nice 0 (1024), quindi il tempo di CPU si divide circa 90,3 : 9,7.
nice 19 ha peso 15; in competizione l'attività B usa solo circa l'1,4% del tempo di CPU.

La tabella dei pesi è l'array [sched_prio_to_weight] nel sorgente del kernel Linux [kernel/sched/core.c], ed è pensata perché ogni aumento di 1 del valore nice riduca il tempo di CPU di circa il 10%.

2️⃣ Uso di base di nice: +10 se manca il numero, e valori fuori intervallo

Metti un comando dopo nice e quel comando gira con un valore nice cambiato; digita nice da solo e stampa il valore nice della shell corrente.

nice
0

Negli esempi qui sotto la bash avviata stampa il proprio valore nice con [ps -o ni=]. Senza -n al valore corrente si aggiunge 10; con -n 5 si aggiunge 5.

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

I valori fuori intervallo vengono portati al limite senza errore, quindi -n 50 gira a 19.

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

Solo root può anticipare un processo con un valore negativo. Un utente normale riceve l'avviso [cannot set niceness] e il comando gira comunque a nice 0.

# come utente normale
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# come root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

Anche i processi figli avviati da un comando lanciato con nice girano con lo stesso valore nice.

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

Quindi, se esegui uno script con nice, anche ogni comando al suo interno cede il passo.

3️⃣ renice: cambiare il valore nice di un processo in esecuzione

nice imposta il valore solo all'avvio, quindi per un processo già in esecuzione si usa renice. Prima controlla il PID e il valore attuale nella colonna NI di top o con ps.

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

Come mostra l'output, renice -n non somma al valore attuale ma imposta quello che indichi: il risultato è 10, non 5 + 10 = 15. Non è come premere ▲ sul telecomando del condizionatore per salire di un livello, ma come impostare la temperatura desiderata a 24 gradi.

Anche la documentazione ufficiale di util-linux descrive -n come valore assoluto; la somma la fa l'opzione [--relative] nelle versioni più recenti. util-linux 2.37.4, la versione provata, non aveva questa opzione.

Un utente normale può solo alzare il valore dei propri processi e non può riabbassarlo una volta alzato.

# come utente normale
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

root può anche abbassarlo; nella stessa prova ha portato 10 direttamente a 3.

🔲 Simulatore di nice · renice

Nel simulatore qui sotto, connesso come utente normale, puoi digitare nice e renice e vedere cambiare il valore nice.

Simulatore del comando nicenice 8.32 · renice 2.37.4
[root@server work]#
Funziona solo nel tuo browser e non tocca mai un processo reale. Il server virtuale è connesso come utente normale: avvia qualcosa con un valore nice cambiato, o cambia il valore di backup.sh (PID 2481) con renice, poi controlla con ps -o pid,ni,cmd. Usa i tasti ↑↓ per richiamare i comandi precedenti.

4️⃣ Misurare la quota di CPU in competizione: nice 0 vs 0·10·19

Alzare il valore nice non rallenta sempre l'attività. La sua quota si riduce solo quando si contende la stessa CPU con un'altra attività.

Due attività sono state vincolate a un solo core (taskset), e lo script qui sotto, che conta di uno in uno per 5 secondi, è stato eseguito in entrambe nello stesso momento. Più alto il conteggio, più tempo di CPU ha usato l'attività.

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

Lo script aumenta n di 1 finché non passano 5 secondi, poi stampa il valore finale.

📊5 secondi a contendersi un coreConteggio in 5 secondi
Prima attività nice 0Seconda attività
nice 0 vs nice 0
Due attività con lo stesso peso.
0250K500K750K1M
nice 0497.59648.8%
nice 0522.04051.2%
nice 0 vs nice 10
Solo la seconda attività gira a nice 10.
0250K500K750K1M
nice 0979.97190.1%
nice 10107.6719.9%
nice 0 vs nice 19
Solo la seconda attività gira a nice 19.
0250K500K750K1M
nice 0909.89598.6%
nice 1913.0101.4%
Numeri da un server AlmaLinux 9 il 17 ottobre 2026, con le due attività vincolate a un core ed eseguite insieme per 5 secondi ciascuna.

Due attività nice 0 si sono divise a metà, mentre nice 10 ha usato circa il 10% e nice 19 solo l'1,4%. Coincide con le proporzioni calcolate dai pesi del kernel (1024 : 110 dà 90,3 : 9,7 e 1024 : 15 dà 98,6 : 1,4).

Eseguita da sola sullo stesso core, l'attività con nice 19 ha contato circa da 650.000 a 1.140.000 volte in 5 secondi. Senza nessuno a cui cedere, anche nice 19 usa la CPU per intero; il carico del server (load average) durante la prova era tra 3 e 5.

5️⃣ ionice: cedere il passo sull'I/O del disco e controllare lo scheduler

nice decide solo la quota di CPU, quindi per attività che leggono e scrivono a lungo sul disco, come i backup, usa ionice per cedere il passo anche nell'ordine del disco. Con -c3 (idle) un'attività viene servita solo quando nessun altro programma usa il disco.

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

Un processo senza classe impostata compare come [none]; secondo la documentazione del kernel è trattato come best-effort, con la priorità calcolata dal valore nice della CPU.

Le classi di ionice hanno effetto solo se lo scheduler del disco le supporta, e la documentazione del kernel indica bfq e mq-deadline come scheduler compatibili. Quello tra parentesi quadre è lo scheduler in uso ora.

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

Il disco NVMe del server di prova usa [none], quindi secondo la documentazione ufficiale ionice potrebbe non avere effetto; l'effetto non è stato misurato a parte. Controlla il nome del disco con lsblk.

6️⃣ Dove usare nice: backup · cron · wp-cli

Aggiungi nice alle attività lunghe ma non urgenti. La compressione dei backup usa sia CPU sia disco, quindi imposta insieme nice e ionice.

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

Se un'attività già in esecuzione rallenta il server, trova il PID in top e alza il valore con renice; per i job cron giornalieri metti nice davanti al comando.

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

Su un server WordPress, se esegui grandi lavori wp-cli come search-replace o la rigenerazione delle immagini con nice -n 10, php-fpm, che gestisce le richieste dei visitatori, ottiene per primo la CPU quando è occupata.

nice -n 10 wp media regenerate --yes

Al contrario, non alzare il valore nice di php-fpm o del server web stesso. Se i processi che rispondono ai visitatori cedono il passo, le pagine rispondono più lentamente quando la CPU è occupata.

🔢 FAQ & contenuti consigliati

Per i processi normali, PR in top è mostrato come 20 più il valore nice. Un processo avviato con nice 5 mostrava PR 25 e NI 5, mentre la colonna PRI di ps usa un altro calcolo e mostrava lo stesso processo come 14.

nice somma il valore indicato al valore nice attuale. [nice -n 5 nice -n 3 nice] stampa 8, diversamente da renice -n, che imposta il valore indicato.

Aggiungi [Nice=] nella sezione [Service] del file di unità del servizio, e questo imposta il valore nice dei processi che il servizio esegue. Secondo la documentazione ufficiale di systemd.exec va da -20 a 19.

🧭 Processi e pianificazione: contenuti consigliati 11 articoli · 4 riferimenti
🗂️ Processi e pianificazione
📄 Comando ps 📄 Comando top 📄 Comando nice di Linux 📄 Comando kill 📄 Comando killall 📄 Background & foreground 📄 Comando uptime
📄 Configurare crontab
📋 WP CLI: installazione e configurazione 📄 WP-Cron(wp-cron.php) 📄 Trovare i pattern sincronizzati: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (documentazione del kernel) 📡 sched_prio_to_weight (sorgente del kernel)

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 3   +   2   =