Linux nice komutu: öncelik belirleme, renice ile değiştirme ve CPU paylaşımını ölçme

Linux nice komutu, bir programın çalışırken diğer süreçlere ne kadar CPU bırakacağını belirleyen nice değerini (-20 ile 19 arası) ayarlar. AlmaLinux 9 sunucusunda iki işi tek CPU çekirdeğine bağlayıp nice değerini değiştirerek yaptığımız ölçümde pay yalnızca CPU için yarışıldığında bölündü ve nice 19 işi yalnızca %1,4 kullandı.
Zaten çalışan süreçleri renice ile değiştirirsiniz; disk tarafında yol vermeyi ionice üstlenir. Üç komutun çıktısı da root ve normal hesapta çalıştırıldığı hâliyle verildi.
1️⃣ Linux nice komutu: Değer aralığı ve CPU için yarışırken pay
nice değeri, CPU zamanı bölünürken bir sürecin ne kadar yol vereceğini belirleyen sayıdır ve -20 ile 19 arasında ayarlanabilir. Programlar normalde 0 ile çalışır; -20 ilk işlenir, 19 en çok yol verir.
Sayı büyüdükçe önce işlendiğini düşünmek kolaydır, ama nice değeri tersine çalışır. Linux zamanlayıcısı her nice değerine bir ağırlık verip CPU zamanını o oranda böler: nice 0 için 1024, 10 için 110, 19 için 15.
Yol verme yalnızca işler CPU için yarıştığında olur. Boşta CPU varsa nice 19 işi bile beklemeden çalışır. Otobüsteki öncelikli koltuklar gibi: boşsa herkes oturur, yer yalnızca otobüs kalabalıkken verilir.
Ağırlık tablosu Linux çekirdek kaynağındaki [kernel/sched/core.c] dosyasında bulunan [sched_prio_to_weight] dizisidir; nice değeri her 1 arttığında CPU zamanı yaklaşık %10 azalacak şekilde belirlenmiştir.
2️⃣ nice temel kullanım: Sayı yazılmazsa +10 ve aralık dışı değerler
nice'ın arkasına komut koyarsanız o komut değiştirilmiş nice değeriyle çalışır; tek başına nice yazarsanız geçerli kabuğun nice değerini yazdırır.
nice0Aşağıdaki örneklerde başlatılan bash kendi nice değerini [ps -o ni=] ile yazdırır. -n olmadan çalıştırınca geçerli değere 10, -n 5 ile 5 eklenir.
nice bash -c 'ps -o ni= -p $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5Aralık dışı değerler hatasız olarak sınır değere çekilir; -n 50 19 ile çalışır.
nice -n 50 bash -c 'ps -o ni= -p $$' 19Negatif değerle öne almayı yalnızca root yapabilir. Normal hesap [cannot set niceness] uyarısı alır ve komut yine nice 0 ile çalışır.
# normal hesap
nice -n -5 bash -c 'ps -o ni= -p $$'nice: cannot set niceness: Permission denied
0# root hesabı
nice -n -5 bash -c 'ps -o ni= -p $$' -5nice ile çalıştırılan komutun başlattığı alt süreçler de aynı nice değeriyle çalışır.
nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!' 7Bu yüzden bir betiği nice ile çalıştırırsanız içindeki tüm komutlar da yol verir.
3️⃣ renice: Çalışan sürecin nice değerini değiştirme
nice değeri yalnızca başlatırken ayarlar; zaten çalışan süreç için renice kullanılır. Önce top'un NI sütunundan ya da ps ile PID'yi ve geçerli değeri kontrol edin.
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 10Çıktıda görüldüğü gibi renice -n geçerli değere eklemez, verdiğiniz değere ayarlar; sonuç 5'e 10 eklenmiş 15 değil, 10'dur. Klima kumandasında ▲ ile bir kademe artırmak gibi değil, hedef sıcaklığı 24 dereceye ayarlamak gibidir.
util-linux resmî belgeleri de -n'i mutlak değer olarak açıklar; eklemeyi yeni sürümlerde [--relative] seçeneği yapar. Test edilen util-linux 2.37.4'te bu seçenek yoktu.
Normal hesap yalnızca kendi süreçlerinin değerini artırabilir; bir kez artırdığı değeri yeniden düşüremez.
# normal hesap
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 düşürebilir de; aynı denemede 10'u doğrudan 3 yaptı.
🔲 nice · renice simülatörü
Normal hesapla oturum açılmış aşağıdaki simülatörde nice ve renice'i kendiniz yazıp nice değerinin değişmesini görebilirsiniz.
4️⃣ CPU için yarışırken payın ölçümü: nice 0 vs 0·10·19
nice değerini artırmak işi her zaman yavaşlatmaz. Pay yalnızca aynı CPU için başka bir işle yarışırken küçülür.
İki iş tek CPU çekirdeğine bağlandı (taskset) ve 5 saniye boyunca birer birer sayan aşağıdaki betik ikisinde aynı anda çalıştırıldı. Sayılan sayı ne kadar büyükse iş o kadar çok CPU zamanı kullanmıştır.
#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $nBetik 5 saniye geçene kadar n'yi 1'er artırır, sonra son değeri yazdırır.
İki nice 0 işi yarı yarıya böldü; nice 10 yaklaşık %10, nice 19 ise yalnızca %1,4 kullandı. Bu, çekirdek ağırlıklarından hesaplanan oranlarla (1024 : 110 için 90,3 : 9,7, 1024 : 15 için 98,6 : 1,4) aynıdır.
Aynı çekirdekte tek başına çalıştırılan nice 19 işi 5 saniyede yaklaşık 650.000–1.140.000 kez saydı. Yol verilecek kimse yoksa nice 19 bile CPU'yu tam kullanır; test sırasında sunucu yükü (load average) 3–5 arasındaydı.
5️⃣ ionice: Disk G/Ç'de yol verme ve zamanlayıcıyı kontrol etme
nice yalnızca CPU payını belirler; yedekleme gibi diski uzun süre okuyup yazan işlerde ionice ile disk sırasında da yol verin. -c3 (idle) ile çalıştırılan iş yalnızca başka program diski kullanmazken işlenir.
ionice -c3 bash -c 'ionice -p $$'idleionice -p $$none: prio 0Sınıf atanmamış süreç [none] olarak gösterilir; çekirdek belgelerine göre best-effort olarak işlenir ve önceliği CPU nice değerinden hesaplanır.
ionice sınıfları yalnızca disk zamanlayıcısı desteklediğinde etkili olur; çekirdek belgeleri destekleyen zamanlayıcılar olarak bfq ve mq-deadline'ı sayar. Köşeli parantez içinde gösterilen, şu an kullanılan zamanlayıcıdır.
cat /sys/block/nvme0n1/queue/scheduler[none] mq-deadline kyber bfqTest sunucusundaki NVMe disk [none] kullandığından resmî belgelere göre ionice orada etkisiz olabilir; etkisi ayrıca ölçülmedi. Disk adını lsblk ile kontrol edin.
6️⃣ nice'ın kullanıldığı yerler: Yedek · cron · wp-cli
Uzun süren ama acil olmayan işlere nice ekleyin. Yedek sıkıştırma hem CPU'yu hem diski kullandığından nice ve ionice'ı birlikte ayarlayın.
nice -n 19 ionice -c3 tar czf backup.tgz /home/exampleZaten çalışan bir iş sunucuyu yavaşlatırsa top'ta PID'yi bulup değerini renice ile artırın; her gün çalışan cron işlerinde komutun önüne nice koyun.
0 3 * * * nice -n 10 /usr/local/bin/backup.shWordPress sunucusunda search-replace ya da görsel yeniden oluşturma gibi büyük wp-cli işlerini nice -n 10 ile çalıştırırsanız, CPU meşgulken ziyaretçi isteklerini işleyen php-fpm CPU'yu önce kullanır.
nice -n 10 wp media regenerate --yesBuna karşılık php-fpm'in ya da web sunucusunun kendisinin nice değerini artırmayın. Ziyaretçiye yanıt veren süreçler yol verirse CPU meşgulken sayfalar geç yanıt verir.
🔢 SSS & önerilen içerikler









ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.
