Perintah nice Linux: Menetapkan Prioritas, Mengubahnya dengan renice, dan Mengukur Jatah CPU saat Berebut
Perintah nice Linux adalah perintah untuk menetapkan nilai nice (-20~19) yang menentukan seberapa banyak CPU yang direlakan sebuah program saat dijalankan. Pada server AlmaLinux 9, dua tugas diikat ke satu core CPU dan nilai nice diubah-ubah saat diukur; hasilnya, jatah CPU hanya terbagi saat tugas berebut CPU, dan tugas nice 19 hanya memakai 1.4%.
Proses yang sudah berjalan diubah dengan renice, dan urusan mengalah di sisi disk ditangani ionice. Untuk ketiga perintah, output yang dimuat adalah hasil asli saat dijalankan langsung dengan akun root dan akun biasa.
1️⃣ Perintah nice Linux: rentang nilai dan jatah saat berebut CPU
Nilai nice adalah angka yang menentukan seberapa jauh sebuah proses mengalah saat waktu CPU dibagi, dan bisa ditetapkan dari -20 sampai 19. Program biasanya berjalan dengan 0; -20 diproses paling dulu dan 19 paling banyak mengalah.
Mudah mengira angka yang lebih besar diproses lebih dulu, tetapi nilai nice justru sebaliknya. Penjadwal Linux memberi bobot untuk setiap nilai nice dan membagi waktu CPU menurut perbandingan itu: nice 0 bernilai 1024, 10 bernilai 110, dan 19 bernilai 15.
Mengalah hanya terjadi saat tugas berebut CPU. Jika ada CPU yang menganggur, tugas nice 19 pun berjalan tanpa menunggu. Ini seperti kursi prioritas di bus: saat kosong siapa pun boleh duduk, dan kursi baru diberikan kepada orang lain saat bus penuh.
Tabel bobot ini adalah larik [sched_prio_to_weight] di kode sumber kernel Linux [kernel/sched/core.c], dan dirancang agar waktu CPU berkurang sekitar 10% setiap kali nilai nice naik 1.
2️⃣ Cara dasar memakai nice: +10 bila angka dihilangkan, dan nilai di luar rentang
Jika sebuah perintah ditulis setelah nice, perintah itu dijalankan dengan nilai nice yang diubah; jika nice diketik tanpa perintah, nilai nice shell saat ini akan ditampilkan.
nice0Contoh di bawah adalah perintah agar bash yang dijalankan menampilkan nilai nice-nya sendiri dengan [ps -o ni=]. Tanpa -n, nilai saat ini ditambah 10, dan -n 5 menambah 5.
nice bash -c 'ps -o ni= -p $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5Nilai di luar rentang disesuaikan ke batasnya tanpa galat, sehingga -n 50 berjalan dengan 19.
nice -n 50 bash -c 'ps -o ni= -p $$' 19Mendahulukan dengan nilai negatif hanya bisa dilakukan akun root. Akun biasa mendapat peringatan [cannot set niceness], dan perintahnya tetap berjalan dengan nice 0.
# akun biasa
nice -n -5 bash -c 'ps -o ni= -p $$'nice: cannot set niceness: Permission denied
0# akun root
nice -n -5 bash -c 'ps -o ni= -p $$' -5Proses anak yang dijalankan lagi oleh perintah yang dijalankan dengan nice juga berjalan dengan nilai nice yang sama.
nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!' 7Karena itu, jika satu skrip dijalankan dengan nice, seluruh perintah di dalamnya ikut mengalah.
3️⃣ renice: mengubah nilai nice proses yang sedang berjalan
nice hanya menetapkan nilai saat menjalankan, jadi proses yang sudah berjalan diubah dengan renice. Periksa dulu PID dan nilai saat ini di kolom NI top atau dengan 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 10Seperti terlihat di output, renice -n tidak menambahkan ke nilai saat ini melainkan menyetel ke nilai yang ditentukan, sehingga hasilnya 10, bukan 15 (5 ditambah 10). Ini bukan seperti menekan tombol ▲ di remote AC untuk naik satu tingkat, melainkan seperti menetapkan suhu yang diinginkan ke 24 derajat.
Dokumentasi resmi util-linux juga menjelaskan -n sebagai nilai absolut, sedangkan cara menambahkan ditangani opsi [--relative] di versi baru. util-linux 2.37.4 yang diuji belum memiliki opsi ini.
Akun biasa hanya bisa menaikkan nilai prosesnya sendiri, dan nilai yang sudah dinaikkan tidak bisa diturunkan lagi.
# akun biasa
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 deniedAkun root juga bisa menurunkannya, dan pada uji yang sama nilai 10 langsung diubah menjadi 3.
🔲 Simulator nice · renice
Di simulator di bawah yang masuk dengan akun biasa, Anda bisa mengetik nice dan renice sendiri dan melihat nilai nice berubah.
4️⃣ Mengukur jatah saat berebut CPU: nice 0 vs 0·10·19
Menaikkan nilai nice tidak selalu membuat tugas itu lebih lambat. Jatahnya hanya berkurang saat berebut CPU yang sama dengan tugas lain.
Dua tugas diikat ke satu core CPU (taskset), lalu skrip di bawah yang menghitung angka satu per satu selama 5 detik dijalankan bersamaan. Semakin besar angka yang dihitung, semakin banyak waktu CPU yang dipakai.
#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $nSkrip menambah n satu per satu sampai 5 detik berlalu, lalu menampilkan nilai terakhir.
Dua tugas nice 0 membagi setengah-setengah, nice 10 memakai sekitar 10%, dan nice 19 hanya 1.4%. Hasil ini sama dengan perbandingan yang dihitung dari bobot kernel (1024 : 110 menjadi 90.3 : 9.7, 1024 : 15 menjadi 98.6 : 1.4).
Saat nice 19 dijalankan sendirian di core yang sama, hitungannya sekitar 650,000–1,140,000 kali dalam 5 detik. Tanpa lawan untuk didahulukan, nice 19 pun memakai CPU sepenuhnya, dan beban server (load average) selama uji adalah 3–5.
5️⃣ ionice: mengalah di sisi disk dan memeriksa penjadwal
nice hanya menentukan jatah CPU, jadi untuk tugas yang lama membaca dan menulis disk seperti backup, gunakan ionice agar urutan disk juga mengalah. Jika dijalankan dengan -c3 (idle), tugas hanya diproses saat tidak ada program lain yang memakai disk.
ionice -c3 bash -c 'ionice -p $$'idleionice -p $$none: prio 0Proses yang tidak diberi pengaturan apa pun ditampilkan sebagai [none]; menurut dokumentasi kernel, proses itu diperlakukan sebagai kelas best-effort dengan prioritas yang dihitung dari nilai nice CPU.
Kelas ionice hanya berpengaruh jika penjadwal disk mendukungnya, dan dokumentasi kernel menyebut bfq dan mq-deadline sebagai penjadwal yang mendukung. Yang ditampilkan dalam kurung siku adalah penjadwal yang sedang dipakai.
cat /sys/block/nvme0n1/queue/scheduler[none] mq-deadline kyber bfqDisk NVMe di server uji memakai [none], jadi menurut dokumentasi resmi ionice bisa jadi tidak berpengaruh, dan efeknya tidak diukur terpisah. Nama disk diperiksa dengan lsblk.
6️⃣ Kapan memakai nice: backup·cron·wp-cli
Tambahkan nice pada pekerjaan yang lama tetapi tidak mendesak. Kompresi backup memakai CPU dan disk sekaligus, jadi tetapkan nice dan ionice bersama.
nice -n 19 ionice -c3 tar czf backup.tgz /home/exampleJika pekerjaan yang sudah berjalan memperlambat server, periksa PID-nya di top lalu naikkan nilainya dengan renice; untuk pekerjaan cron yang berjalan setiap hari, tambahkan nice di depan perintah.
0 3 * * * nice -n 10 /usr/local/bin/backup.shDi server WordPress, jika pekerjaan wp-cli besar seperti search-replace atau pembuatan ulang gambar dijalankan dengan nice -n 10, php-fpm yang melayani permintaan pengunjung akan memakai CPU lebih dulu saat CPU sibuk.
nice -n 10 wp media regenerate --yesSebaliknya, jangan naikkan nilai nice php-fpm atau server web itu sendiri. Jika proses yang melayani pengunjung mengalah, respons halaman jadi lambat saat CPU sibuk.
🔢 FAQ & Konten yang Direkomendasikan









ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.
