Memeriksa Proses

Mengamati proses dengan ps aux, top, dan htop.

Daftar isi

Topik ini membahas cara mengamati proses yang sedang berjalan, mulai dari potret sekali jalan dengan ps aux, penyaringan daftarnya, sampai pemantauan berkelanjutan dengan top dan htop. Setelah membacanya, setiap kolom pada kedua tampilan tersebut dapat ditafsirkan, dan proses tertentu dapat dicari dengan cepat di antara ratusan proses lain. Kemampuan ini menjadi alat kerja harian untuk topik-topik berikutnya, karena setiap perubahan yang dilakukan terhadap proses perlu diperiksa ulang lewat daftar yang sama.

Kolom pada ps aux#

Perintah ps tanpa argumen hanya menampilkan proses milik sesi terminal tempat perintah dijalankan, sedangkan ps aux menampilkan seluruh proses milik semua pengguna dalam format yang mudah dibaca. Keluarannya berupa satu baris header diikuti satu baris untuk setiap proses, dan barisnya dapat berjumlah ratusan pada sistem yang sedang sibuk. Baris header berikut diambil dari eksekusi nyata pada lingkungan contoh.

bash
# ps aux mencantumkan setiap proses; baris pertamanya adalah header kolom
ps aux | sed -n '1p'
text Keluaran
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
KolomIsi
USERPengguna pemilik proses
PIDNomor identitas proses
%CPUPemakaian prosesor saat ini
%MEMPorsi memori fisik yang dipakai
VSZUkuran memori virtual dalam kilobyte
RSSMemori fisik yang benar-benar dipegang
TTYTerminal pengendali, ? berarti tanpa terminal
STATKode keadaan proses
STARTJam ketika proses dimulai
TIMETotal waktu prosesor yang telah dipakai
COMMANDPerintah beserta argumennya

Dua kolom sering tertukar oleh pembaca baru. Kolom START menyatakan jam mulai, sedangkan TIME menyatakan akumulasi waktu prosesor yang sudah dipakai. Untuk proses yang kebanyakan menunggu, nilai TIME biasanya hanya beberapa detik meskipun prosesnya sudah hidup berjam-jam. Kolom TTY bernilai ? untuk proses yang tidak terikat terminal mana pun, pola yang khas pada layanan sistem dan proses latar belakang.

Menyaring proses tertentu#

Daftar penuh ps aux terlalu panjang untuk dibaca satu per satu, sehingga proses yang dicari disaring dengan grep. Contoh berikut melahirkan dua proses sleep, lalu menghitung baris yang cocok.

bash
sleep 300 &
PID=$!
sleep 301 &
PID2=$!
# jeda singkat agar kedua proses sempat mengganti citranya
sleep 0.3
# menyaring baris proses sleep, lalu menghitungnya
ps aux | grep '[s]leep 30' | wc -l
kill "$PID"
wait "$PID" 2>/dev/null
kill "$PID2"
wait "$PID2" 2>/dev/null
echo "kedua proses contoh dihentikan"
text Keluaran
2
kedua proses contoh dihentikan

Pola [s]leep 30 memakai trik kurung siku: karakter pertama dinyatakan sebagai kelas karakter yang berisi satu huruf s. Pola ini tetap cocok dengan kata sleep pada keluaran ps, tetapi tidak cocok dengan teks grep '[s]leep 30' yang tercantum pada baris perintah grep itu sendiri, sehingga proses grep tidak ikut terhitung. Tanpa trik ini, hasil pencarian selalu memuat satu baris tambahan milik grep.

Selain menyaring baris, ps dapat menampilkan hanya kolom yang dipilih dengan opsi -o dan hanya proses tertentu dengan opsi -p, persis seperti pada topik konsep proses. Contoh berikut menerapkan bentuk tersebut pada satu proses sleep.

bash
sleep 300 &
PID=$!
sleep 0.3
# kolom PID ditandai N karena nilainya berbeda di setiap sesi
ps -o user,pid,stat,cmd -p "$PID" | awk 'NR>1{$2="N"} {$1=$1; print}'
kill "$PID"
wait "$PID" 2>/dev/null
echo "contoh dihentikan dengan status $?"
text Keluaran
USER PID STAT CMD
z N S sleep 300
contoh dihentikan dengan status 143

Keluarannya berupa satu baris proses sleep milik pengguna z, dengan PID yang ditandai N karena berubah di setiap eksekusi. Bentuk selektif ini lebih stabil untuk dijadikan dasar pengolahan lanjutan, misalnya disalurkan ke awk atau disimpan ke berkas, karena posisi kolomnya pasti dan tidak bergeser mengikuti lebar nilai kolom lain. Pemilihan prosesnya juga eksplisit melalui PID, bukan melalui pencocokan teks yang rawan meleset.

Memantau dengan top dan htop#

Perintah top menampilkan informasi yang sama dengan ps aux, tetapi dalam sudut pandang berbeda, yaitu tampilan layar penuh yang diperbarui secara berkala. Opsi -bn1 mengaktifkan mode batch, yang mencetak satu potret lalu berhenti, sehingga cocok untuk direkam atau disalurkan ke perintah lain. Lima baris pertama potret itu berisi ringkasan, yaitu waktu dan rata-rata beban, jumlah proses per keadaan, pemakaian prosesor, serta pemakaian memori utama dan swap. Baris setelahnya adalah tabel proses, dan header tabel tersebut diambil oleh contoh berikut.

bash
# keluaran top berubah dari waktu ke waktu; baris header tabelnya tetap
top -bn1 | sed -n '7p'
text Keluaran
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
KolomIsi
PID dan USERNomor proses dan pemiliknya
PR dan NIPrioritas kernel dan nilai nice
VIRT, RES, SHRMemori virtual, residen, dan bersama
SKeadaan proses
%CPU dan %MEMPemakaian prosesor dan memori
TIME+Waktu prosesor dengan satu desimal
COMMANDNama perintah

Kolom PR dan NI menghubungkan tampilan ini dengan pengaturan prioritas yang dibahas pada topik prioritas proses. Untuk pemantauan berkelanjutan, jalankan top tanpa opsi apa pun pada mesin latihan, tekan q untuk keluar, dan amati bagaimana urutan barisnya berubah mengikuti pemakaian prosesor.

bash
# tidak-dijalankan
# htop tidak terpasang pada lingkungan contoh; pada mesin latihan:
htop

Kesalahan umum#

  • Menyaring ps aux dengan grep sleep tanpa kurung siku. Baris milik proses grep sendiri ikut terhitung karena perintahnya memuat kata yang dicari. Gunakan pola [s]leep atau periksa hasilnya dengan cermat.
  • Mengira %CPU berhenti di angka 100. Nilai itu dinyatakan per inti, sehingga proses dengan banyak thread dapat menampilkan 400 pada mesin empat inti. Bandingkan dengan jumlah inti sebelum menyimpulkan prosesnya memberatkan sistem.
  • Menilai umur proses dari kolom TIME. Kolom itu menghitung waktu prosesor yang dipakai, bukan lama proses hidup. Umur proses dihitung dari kolom START atau dari kolom waktu pada ps -o seperti etime.
  • Menganggap satu potret ps aux cukup untuk mendiagnosis beban. Nilai %CPU bergerak cepat, sehingga potret tunggal mudah menyesatkan. Amati beberapa potret berturut-turut dengan top sebelum mengambil kesimpulan.

Ringkasan#

  • ps aux memberi potret sekali jalan atas seluruh proses, dengan USER, PID, %CPU, %MEM, STAT, dan COMMAND sebagai kolom kuncinya.
  • Penyaringan dengan grep '[s]leep' dan penghitungan dengan wc -l menemukan proses tertentu, sedangkan ps -o ... -p ... menampilkan kolom dan proses yang dipilih secara eksplisit.
  • top -bn1 mencetak satu potret penuh yang dibuka ringkasan beban dan memori, sedangkan top tanpa opsi memantau secara berkelanjutan.
  • htop menawarkan tampilan interaktif yang sejenis dan dipasang melalui apt apabila belum tersedia.

Referensi#