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.
# ps aux mencantumkan setiap proses; baris pertamanya adalah header kolom
ps aux | sed -n '1p'USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND| Kolom | Isi |
|---|---|
USER | Pengguna pemilik proses |
PID | Nomor identitas proses |
%CPU | Pemakaian prosesor saat ini |
%MEM | Porsi memori fisik yang dipakai |
VSZ | Ukuran memori virtual dalam kilobyte |
RSS | Memori fisik yang benar-benar dipegang |
TTY | Terminal pengendali, ? berarti tanpa terminal |
STAT | Kode keadaan proses |
START | Jam ketika proses dimulai |
TIME | Total waktu prosesor yang telah dipakai |
COMMAND | Perintah 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.
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"2
kedua proses contoh dihentikanPola [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.
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 $?"USER PID STAT CMD
z N S sleep 300
contoh dihentikan dengan status 143Keluarannya 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.
# keluaran top berubah dari waktu ke waktu; baris header tabelnya tetap
top -bn1 | sed -n '7p' PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND| Kolom | Isi |
|---|---|
PID dan USER | Nomor proses dan pemiliknya |
PR dan NI | Prioritas kernel dan nilai nice |
VIRT, RES, SHR | Memori virtual, residen, dan bersama |
S | Keadaan proses |
%CPU dan %MEM | Pemakaian prosesor dan memori |
TIME+ | Waktu prosesor dengan satu desimal |
COMMAND | Nama 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.
# tidak-dijalankan
# htop tidak terpasang pada lingkungan contoh; pada mesin latihan:
htopKesalahan umum#
- Menyaring
ps auxdengangrep sleeptanpa kurung siku. Baris milik prosesgrepsendiri ikut terhitung karena perintahnya memuat kata yang dicari. Gunakan pola[s]leepatau periksa hasilnya dengan cermat. - Mengira
%CPUberhenti 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 kolomSTARTatau dari kolom waktu padaps -osepertietime. - Menganggap satu potret
ps auxcukup untuk mendiagnosis beban. Nilai%CPUbergerak cepat, sehingga potret tunggal mudah menyesatkan. Amati beberapa potret berturut-turut dengantopsebelum mengambil kesimpulan.
Ringkasan#
ps auxmemberi potret sekali jalan atas seluruh proses, denganUSER,PID,%CPU,%MEM,STAT, danCOMMANDsebagai kolom kuncinya.- Penyaringan dengan
grep '[s]leep'dan penghitungan denganwc -lmenemukan proses tertentu, sedangkanps -o ... -p ...menampilkan kolom dan proses yang dipilih secara eksplisit. top -bn1mencetak satu potret penuh yang dibuka ringkasan beban dan memori, sedangkantoptanpa opsi memantau secara berkelanjutan.htopmenawarkan tampilan interaktif yang sejenis dan dipasang melaluiaptapabila belum tersedia.
Referensi#
- ps(1) — Linux man-pages project
— Format proses, daftar kolom pada keluaran aux, dan opsi seleksi
-odan-p. - top(1) — Linux man-pages project — Mode batch, tata letak potret, dan arti kolom tabel proses.
- htop — situs resmi htop — Penjelasan tampilan dan fitur interaktif htop beserta tautan unduhannya.