Kode contoh pada bab-bab sebelumnya bisa diukur dari dalam proses, tetapi aplikasi produksi menuntut alat yang mengamati dari luar. Ekosistem .NET menyediakan serangkaian CLI resmi: dotnet-counters untuk metrik langsung, dotnet-gcdump untuk potret isi heap, dan dotnet-trace untuk perekaman profil. Ketiganya menempel pada proses .NET yang sedang berjalan tanpa perlu membangun ulang kode.
dotnet-counters: Metrik GC Langsung #
Perintah dotnet-counters monitor --counters System.Runtime -p 12345 memantau proses dengan ID 12345. Metrik yang paling sering dibaca: alloc-rate (laju alokasi per detik), gen-0-gc-count, gen-1-gc-count, gen-2-gc-count (frekuensi koleksi per menit), gen-2-size, loh-size (ukuran Large Object Heap), dan time-in-gc (persentase waktu proses dihabiskan di GC).
Press p to pause, r to resume, q to quit.
Status: Running
Name Current Value
--- -------------
System.Runtime
CPU Usage (%) 12.4
GC Heap Size (MB) 186.2
Gen 0 GC Count (Count / 1 min) 9
Gen 1 GC Count (Count / 1 min) 2
Gen 2 GC Count (Count / 1 min) 0
LOH Size (MB) 121.8
Alloc Rate (MB / 1 sec) 42.7
Time in GC (%) 3.1Pola yang perlu diwaspadai: alloc rate tinggi disertai gen0 count tinggi menandakan tekanan alokasi; LOH size yang terus tumbuh menandakan buffer besar dibuat berulang kali; time in GC di atas sepuluh persen menandakan GC terlalu sering menjadi penghambat.
dotnet-gcdump: Potret Isi Heap #
Perintah dotnet-gcdump collect -p 12345 menghasilkan file .gcdump. File itu dibuka di Visual Studio atau dotnet-gcdump report untuk melihat tipe apa yang menempati memori terbanyak dan berapa jumlah instansnya. Alur yang lazim: ambil dua dump dengan jeda beberapa menit, bandingkan jumlah instans, dan cari tipe yang jumlahnya terus naik tanpa penurunan.
Alur Diagnosis Tekanan Memori #
- Jalankan
dotnet-countersdan catat alloc rate serta frekuensi koleksi saat beban normal. - Bila gen2 atau LOH terus tumbuh, ambil
dotnet-gcdumpdua kali dan bandingkan tipe yang menumpuk. - Turunkan ke kode: cari pemegang rujukan (event, field static, cache) dengan bantuan potret heap.
- Perbaiki dengan teknik bab Allocation Reduction, lalu ulangi langkah pertama untuk membuktikan perbaikannya.