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

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.
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.
nice0W 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 $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5WartoĆ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 $$' 19Tylko 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 $$' -5Procesy 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 $!' 7Dlatego 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 600renice -n 10 -p 201643201643 (process ID) old priority 5, new priority 10Jak 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 201649201649 (process ID) old priority 0, new priority 10renice -n 5 -p 201649renice: failed to set priority for 201649 (process ID): Permission deniedroot 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.
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 $nSkrypt zwiÄksza n o 1, aĆŒ minie 5 sekund, a potem wypisuje koĆcowÄ wartoĆÄ.
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 $$'idleionice -p $$none: prio 0Proces 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 bfqDysk 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/exampleJeĆ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.shNa 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 --yesNatomiast 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









âčïž 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.
