Stats dan Top

Pemantauan pemakaian sumber daya dan proses di dalam container secara langsung.

Daftar isi

Topik ini membahas dua perintah pemantauan yang bekerja pada container yang berjalan. Perintah docker stats menampilkan stats, yaitu statistik pemakaian CPU, memori, jaringan, dan disk, secara langsung, sedangkan docker top menampilkan daftar proses di dalam container. Keduanya menjadi alat pertama ketika aplikasi terasa lambat, memori membengkak, atau muncul proses yang tidak dikenal.

Pemantauan sumber daya dengan docker stats#

docker stats menampilkan satu baris untuk setiap container yang berjalan dan membaruinya terus-menerus sampai dihentikan. Setiap baris memuat pengukuran yang sama, sehingga perkembangan pemakaian sumber daya dapat diamati sambil aplikasi melayani beban. Kolom-kolom utamanya adalah sebagai berikut.

KolomIsi
CPU %Persentase pemakaian CPU container terhadap seluruh kapasitas host
MEM USAGE / LIMITMemori terpakai dibandingkan batas yang dipasang --memory
MEM %Persentase memori terpakai terhadap batasnya
NET I/OJumlah data yang diterima dan dikirim melalui jaringan container
BLOCK I/OJumlah data yang dibaca dan ditulis ke disk
PIDSJumlah proses dan thread, unit eksekusi yang lebih ringan daripada proses, yang hidup di dalam container

Nilai pembanding pada kolom MEM USAGE mengikuti batas memori yang dipasang pada saat container dibuat. Container yang dijalankan tanpa --memory menampilkan batas seluruh memori host, yaitu mesin tempat Docker berjalan, sedangkan container yang dijalankan dengan --memory menampilkan angka batas tersebut. Pemakaian yang mendekati batas menjadi indikasi pertama bahwa batas memori perlu ditinjau ulang atau aplikasi menyimpan data tanpa melepasnya.

Angka pada kolom CPU % dapat melebihi 100, karena nilai itu dihitung terhadap satu inti penuh. Aplikasi yang bekerja pada dua inti menampilkan angka sekitar 200, dan pemakaian itu tetap dibatasi bila --cpus dipasang pada saat container dibuat. Nilai pada kolom NET I/O dan BLOCK I/O terus berubah mengikuti lalu lintas, sehingga kolom yang tidak berubah pada aplikasi yang seharusnya sibuk juga merupakan temuan berarti.

Keluaran langsung yang terus diperbarui nyaman untuk pengamatan, tetapi tidak cocok untuk skrip. Opsi --no-stream mengambil satu pengukuran saja, menampilkannya, lalu berakhir. Bentuk sekali tangkap inilah yang dipanggil oleh skrip pemantauan atau pemeriksa berkala, karena perintahnya selesai dengan sendirinya.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# pantau seluruh container yang berjalan secara langsung
docker stats
# ambil satu pengukuran saja lalu berhenti
docker stats --no-stream

Daftar proses dengan docker top#

docker top menampilkan daftar proses yang hidup di dalam sebuah container, sebagaimana ps menampilkan proses pada host. Nama top diambil dari alat klasik Unix yang menampilkan proses, tetapi keluarannya berupa satu potret statis dan bukan tampilan yang diperbarui terus-menerus. Perintah ini menerima satu container sebagai argumen utamanya.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# daftar proses di dalam container aplikasi catatan
docker top catatan-app

Setiap baris keluarannya memuat pengguna, PID, proses induk, waktu mulai, dan perintah lengkap yang menjalankan proses tersebut. PID adalah nomor identitas proses. Pengukurannya diambil dari sisi host, sehingga nomor PID yang tampil adalah versi host, sedangkan di dalam container proses utama berperan sebagai PID 1. Opsi tampilan milik ps pun diterima setelah nama container, misalnya docker top catatan-app -ef, untuk memilih format keluaran yang berbeda.

Daftar proses ini menjawab pertanyaan yang tidak dijawab stats. Aplikasi yang melambat dengan pemakaian CPU rendah menunjuk proses yang menunggu sesuatu, sedangkan daftar proses yang lebih panjang dari perkiraan menunjukkan adanya proses tambahan di dalam container. Proses utama, server aplikasi, dan proses pendampingnya dapat dihitung satu per satu dari kolom perintah lengkapnya.

Menemukan proses liar dan kebocoran memori#

Kombinasi kedua perintah itu menjadi prosedur diagnosis yang rutin. Container yang pemakaian memorinya naik terus setiap kali diamati pada docker stats menunjuk memory leak, yaitu kebocoran memori. Kondisi ini terjadi ketika program terus memakai memori tanpa melepaskannya, sehingga pemakaian naik secara bertahap. Kenaikan yang stabil dari jam ke jam lebih mudah dibaca pada bentuk sekali tangkap yang dicatat berulang, karena angkanya dapat dibandingkan langsung.

Proses liar, yaitu proses yang tidak termasuk rancangan aplikasi, paling cepat ditemukan pada docker top. Daftar proses yang memuat perintah tidak dikenal, proses yang jumlahnya membengkak, atau proses yang memakan CPU tinggi tanpa beban menandakan sesuatu yang perlu ditelusuri. Kolom PIDS pada stats melengkapinya, karena jumlah proses yang melonjak mendadak menandakan proses yang terus membuat proses baru. Perintah lengkap pada kolom CMD menunjuk sumbernya, lalu dicocokkan dengan daftar proses yang memang seharusnya ada di dalam image.

Temuan keduanya kemudian diperiksa lebih jauh melalui log dan metadata. Log memperlihatkan pesan yang dihasilkan aplikasi pada saat pemakaian memori melonjak, sedangkan metadata pada docker inspect memuat batas memori yang dipasang. Pola kerjanya selalu sama, yaitu mengukur lewat stats, mendaftar proses lewat top, lalu menelusuri penyebabnya lewat log.

Ringkasan#

  • docker stats menampilkan pemakaian CPU, memori, jaringan, disk, dan jumlah proses per container secara langsung dan terus diperbarui.
  • Opsi --no-stream mengambil satu pengukuran saja sehingga cocok untuk skrip dan pencatatan berkala.
  • docker top menampilkan daftar proses di dalam container beserta perintah lengkapnya, sebagaimana ps pada host.
  • Kenaikan memori yang stabil menunjuk memory leak, sedangkan proses tak dikenal ditemukan melalui daftar proses.

Referensi#