Polecenie nice w Linuksie: ustawianie priorytetu, zmiana przez renice i pomiar udziału CPU przy rywalizacji

Środowisko testoweRodzina RHELAlmaLinux 9.8root · zwykłe konto użytkownikaSprawdzono 17.10.2026
Polecenia procesów · harmonogramunicereniceioniceLokalizacja/usr/bin/nice

Polecenie nice w Linuksie ustawia wartość nice programu (od -20 do 19), która decyduje, ile CPU oddaje on innym procesom podczas działania. Pomiary na serwerze AlmaLinux 9, z dwoma zadaniami przypiętymi do jednego rdzenia i zmienianą wartością nice, pokazały, że CPU dzieli się tylko wtedy, gdy zadania o nie rywalizują, a zadanie z nice 19 zużyło zaledwie 1,4%.

Już działające procesy zmienia się przez renice, a ustępowanie po stronie dysku zapewnia ionice. Dla wszystkich trzech poleceń podano wynik dokładnie taki, jaki wypisały na koncie root i zwykłym.

1️⃣ Polecenie nice w Linuksie: zakres wartości i udział w CPU przy rywalizacji

Wartość nice to liczba określająca, ile proces ustępuje przy podziale czasu CPU; można ją ustawić od -20 do 19. Programy zwykle działają z 0; -20 jest obsługiwane najpierw, a 19 ustępuje najbardziej.

Łatwo założyć, że większa liczba oznacza pierwszeństwo, ale wartości nice działają odwrotnie. Harmonogram Linuksa przypisuje każdej wartości nice wagę i dzieli czas CPU w tej proporcji: nice 0 to 1024, 10 to 110, a 19 to 15.

Ustępowanie zachodzi tylko wtedy, gdy zadania rywalizują o CPU. Jeśli jest wolny procesor, nawet zadanie z nice 19 działa bez czekania. To jak miejsca uprzywilejowane w autobusie: gdy są wolne, każdy siada, a ustępuje się tylko w tłoku.

🧭 Wartości nice przy wolnym i zajętym CPU
Diagram objaśniający
🖥️ CPU
⚖️ Zadanie B
🖥️ Jest wolny CPU, więc każde zadanie ma własny rdzeń🖥️ Dwa zadania dzielą jeden rdzeń CPU
Zadanie Anice 0 · waga 1024
100%50.0%90.3%98.6%
Zadanie Bnice 0 · waga 1024nice 10 · waga 110nice 19 · waga 15
100%50.0%9.7%1.4%
Przy wolnym CPU nie ma komu ustępować, więc zadanie B korzysta z CPU w pełni niezależnie od wartości nice.
Gdy rywalizują o ten sam rdzeń, dwa zadania nice 0 o równej wadze dzielą czas CPU po połowie.
nice 10 ma wagę 110, około jedną dziewiątą nice 0 (1024), więc czas CPU dzieli się mniej więcej 90,3 : 9,7.
nice 19 ma wagę 15; przy rywalizacji zadanie B zużywa tylko około 1,4% czasu CPU.

Tabela wag to tablica [sched_prio_to_weight] w źródłach jądra Linuksa [kernel/sched/core.c]; ułożono ją tak, by każdy wzrost nice o 1 zmniejszał czas CPU o około 10%.

2️⃣ Podstawy nice: +10 bez liczby i wartości spoza zakresu

Dodaj polecenie po nice, a uruchomi się ze zmienioną wartością nice; samo nice wypisuje wartość nice bieżącej powłoki.

nice
0

W przykładach poniżej uruchomiony bash wypisuje własną wartość nice przez [ps -o ni=]. Bez -n do bieżącej wartości dodaje się 10, a z -n 5 dodaje się 5.

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

Wartości spoza zakresu są bez błędu przycinane do granicy, więc -n 50 działa z 19.

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

Tylko root może przyspieszyć proces wartością ujemną. Zwykły użytkownik dostaje ostrzeżenie [cannot set niceness], a polecenie i tak działa z nice 0.

# jako zwykły użytkownik
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# jako root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

Procesy potomne uruchamiane przez polecenie pod nice też działają z tą samą wartością nice.

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

Dlatego gdy uruchomisz skrypt przez nice, ustępuje też każde polecenie w środku.

3️⃣ renice: zmiana wartości nice działającego procesu

nice ustawia wartość tylko przy starcie, więc dla działającego procesu używa się renice. Najpierw sprawdź PID i bieżącą wartość w kolumnie NI w top albo przez 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

Jak widać w wyniku, renice -n nie dodaje do bieżącej wartości, lecz ustawia podaną: wynik to 10, a nie 5 + 10 = 15. To nie jak naciśnięcie ▲ na pilocie klimatyzatora o jeden stopień, tylko jak ustawienie docelowej temperatury na 24 stopnie.

Oficjalna dokumentacja util-linux też opisuje -n jako wartość bezwzględną; dodawanie obsługuje w nowszych wersjach opcja [--relative]. Testowany util-linux 2.37.4 tej opcji nie miał.

Zwykły użytkownik może tylko podnosić wartość własnych procesów i nie może jej z powrotem obniżyć.

# jako zwykły użytkownik
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 może ją też obniżyć; w tym samym teście zmienił 10 od razu na 3.

🔲 Symulator nice · renice

W symulatorze poniżej, zalogowanym jako zwykły użytkownik, sam wpiszesz nice i renice i zobaczysz zmianę wartości nice.

Symulator polecenia nicenice 8.32 · renice 2.37.4
[root@server work]#
Działa tylko w przeglądarce i nigdy nie dotyka prawdziwego procesu. Wirtualny serwer jest zalogowany na zwykłym koncie: uruchom coś ze zmienioną wartością nice albo zmień wartość backup.sh (PID 2481) przez renice i sprawdź przez ps -o pid,ni,cmd. Klawiszami ↑↓ przywołasz wcześniejsze polecenia.

4️⃣ Pomiar udziału w CPU przy rywalizacji: nice 0 vs 0·10·19

Podniesienie wartości nice nie zawsze spowalnia zadanie. Jego udział maleje tylko wtedy, gdy rywalizuje z innym zadaniem o ten sam CPU.

Dwa zadania przypięto do jednego rdzenia CPU (taskset), a poniższy skrypt, który przez 5 sekund liczy po jednym, uruchomiono w obu jednocześnie. Im większa liczba, tym więcej czasu CPU zużyło zadanie.

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

Skrypt zwiększa n o 1, aż minie 5 sekund, a potem wypisuje końcową wartość.

📊5 sekund rywalizacji o jeden rdzeń CPULiczba w 5 sekund
Pierwsze zadanie nice 0Drugie zadanie
nice 0 vs nice 0
Dwa zadania o tej samej wadze.
0250K500K750K1M
nice 0497 59648.8%
nice 0522 04051.2%
nice 0 vs nice 10
Tylko drugie zadanie działa z nice 10.
0250K500K750K1M
nice 0979 97190.1%
nice 10107 6719.9%
nice 0 vs nice 19
Tylko drugie zadanie działa z nice 19.
0250K500K750K1M
nice 0909 89598.6%
nice 1913 0101.4%
Liczby z serwera AlmaLinux 9 z 17 października 2026, gdy dwa zadania przypięte do jednego rdzenia działały jednocześnie po 5 sekund.

Dwa zadania nice 0 podzieliły się po połowie, nice 10 zużyło około 10%, a nice 19 tylko 1,4%. To zgadza się z proporcjami wyliczonymi z wag jądra (1024 : 110 daje 90,3 : 9,7, a 1024 : 15 daje 98,6 : 1,4).

Uruchomione samo na tym samym rdzeniu zadanie z nice 19 doliczyło w 5 sekund do około 650 000–1 140 000. Bez nikogo, komu trzeba ustąpić, nawet nice 19 w pełni korzysta z CPU; obciążenie serwera (load average) w czasie testu wynosiło 3–5.

5️⃣ ionice: ustępowanie przy I/O dysku i sprawdzanie harmonogramu

nice ustala tylko udział w CPU, więc przy zadaniach długo czytających i zapisujących dysk, jak kopie zapasowe, ustąp też kolejności dysku przez ionice. Z -c3 (idle) zadanie jest obsługiwane tylko wtedy, gdy żaden inny program nie używa dysku.

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

Proces bez ustawionej klasy jest pokazywany jako [none]; według dokumentacji jądra traktuje się go jako best-effort, a priorytet wylicza się z wartości nice CPU.

Klasy ionice działają tylko, gdy harmonogram dysku je obsługuje; dokumentacja jądra wymienia bfq i mq-deadline jako obsługujące. Ten w nawiasach kwadratowych jest obecnie używany.

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

Dysk NVMe na serwerze testowym używa [none], więc według oficjalnej dokumentacji ionice może tam nie działać; efektu nie mierzono osobno. Nazwę dysku sprawdzisz przez lsblk.

6️⃣ Gdzie używać nice: kopie zapasowe · cron · wp-cli

Dodawaj nice do zadań długich, ale niepilnych. Kompresja kopii zapasowej używa CPU i dysku, więc ustaw razem nice i ionice.

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

Jeśli działające zadanie spowalnia serwer, znajdź PID w top i podnieś wartość przez renice; w codziennych zadaniach cron dopisz nice przed poleceniem.

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

Na serwerze WordPress, gdy duże zadania wp-cli, jak search-replace czy ponowne generowanie obrazów, uruchomisz z nice -n 10, php-fpm obsługujący odwiedzających dostanie CPU jako pierwszy, gdy jest zajęty.

nice -n 10 wp media regenerate --yes

Natomiast nie podnoś wartości nice php-fpm ani samego serwera WWW. Jeśli procesy odpowiadające odwiedzającym będą ustępować, strony odpowiedzą wolniej przy zajętym CPU.

🔢 FAQ & polecane treści

Dla zwykłych procesów PR w top to 20 plus wartość nice. Proces uruchomiony z nice 5 pokazał PR 25 i NI 5, a kolumna PRI w ps liczy inaczej i pokazała ten sam proces jako 14.

nice dodaje podaną wartość do bieżącej wartości nice. [nice -n 5 nice -n 3 nice] wypisuje 8, inaczej niż renice -n, które ustawia podaną wartość.

Dopisz [Nice=] w sekcji [Service] pliku jednostki usługi, a ustawi to wartość nice procesów uruchamianych przez usługę. Według oficjalnej dokumentacji systemd.exec można ustawić od -20 do 19.

🧭 Procesy i harmonogramowanie zadań: polecane treści 11 wpisów · 4 źródła
🗂️ Procesy i harmonogramowanie zadań
📄 Polecenie ps 📄 Polecenie top 📄 Polecenie nice w Linuksie 📄 Polecenie kill 📄 Polecenie killall 📄 Tło & pierwszy plan 📄 Polecenie uptime
📄 Konfiguracja crontab
📋 WP CLI: instalacja i konfiguracja 📄 WP-Cron(wp-cron.php) 📄 Znajdowanie zsynchronizowanych wzorców: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (dokumentacja jądra) 📡 sched_prio_to_weight (źródło jądra)

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 9   +   1   =