Identifikasi kebocoran memori, fragmentasi, dan error OOM di kluster ACK menggunakan diagnostik visual.
Diagnostik memori mencakup tiga area: memory overview, memory analysis, dan OOM analysis. Periksa penggunaan memori baik di tingkat node maupun Pod.
Item diagnostik yang ditampilkan mencerminkan konfigurasi aktual kluster Anda.
Saat menjalankan diagnostik, ACK mengumpulkan data dari setiap node, termasuk versi sistem, status beban, status Docker dan kubelet, serta pesan error penting dalam log sistem. ACK tidak mengumpulkan data bisnis atau informasi sensitif.
Alur kerja diagnostik
Gunakan ketiga area diagnostik secara berurutan untuk mempersempit masalah memori:
-
Memory overview — Periksa risiko memori: kebocoran memori, fragmentasi, entri Memcg yang tidak dilepas, dan pemborosan THP. Gunakan grafik untuk menentukan apakah penggunaan abnormal terjadi pada memori kernel atau memori aplikasi.
-
Memory analysis — Telusuri lebih dalam penggunaan memori di tingkat proses dan Pod untuk mengidentifikasi proses atau kontainer yang mengonsumsi memori anonim, page cache, atau shared memory secara berlebihan.
-
OOM analysis — Tinjau jumlah dan jenis event OOM untuk menentukan apakah error OOM terjadi di tingkat node (Host) atau kontainer (cgroup), serta kontainer mana yang mencapai batas memorinya.
Memory overview
Identifikasi risiko memori melalui item diagnostik berikut.
| Item diagnostik | Deskripsi |
|---|---|
| Leaked Memory | Memeriksa memory leak pada kernel di Slab, Vmalloc, dan buddy system (allocpage). |
| Memory Usage | Menampilkan pemanfaatan memori sistem. |
| Memcg | Memeriksa apakah memory cgroup (Memcg) yang tidak dilepas menurunkan kinerja sistem atau menyebabkan kesalahan statistik. |
| Memory Fragmentation | Memeriksa fragmentasi memori yang menurunkan kinerja sistem. |
| THPZeroPage | Mengevaluasi rasio pemborosan Transparent Huge Page (THP). |
Penggunaan memori sistem ditampilkan dalam tiga kategori:
-
Kernel memory (kernel): total memori yang digunakan oleh kernel OS.
-
Application memory (app): total memori yang digunakan oleh program mode pengguna.
-
Free memory (free): total memori sistem yang tersedia.
Konsep utama
Istilah berikut digunakan di seluruh fitur diagnostik memori.
| Istilah | Deskripsi |
|---|---|
| Memory leak | Terjadi ketika memori yang dialokasikan secara dinamis tidak pernah dilepas, sehingga penggunaan memori terus meningkat. Memory leak yang tidak terselesaikan menurunkan kinerja dan dapat menyebabkan crash. |
| Memory utilization | Memory utilization = (Total memori - Free memori) x 100 / Total memori. Page cache dihitung sebagai memori bebas dan tidak memengaruhi utilization — kernel dapat mereklaimnya kapan saja. |
| Unreleased Memcg | Memory cgroup yang tidak dilepas akibat pengecualian sistem. Dapat menurunkan kinerja sistem. |
| Memory fragmentation | Seiring waktu, blok memori bebas yang bersambungan menjadi terlalu kecil untuk permintaan alokasi besar. Hal ini memperlambat alokasi dan menyebabkan jitter pada aplikasi. |
| Ratio of THP waste | Ratio of THP waste = Jumlah THP nol x 100% / Total jumlah THP. Lihat detail THP di bawah. |
| Buddy system | Algoritma kernel Linux untuk mengelola halaman memori. Membagi halaman menjadi 11 kelompok dengan ukuran blok pangkat dua: 4 KB, 8 KB, 16 KB, 32 KB ... 4 MB. Sebagian besar halaman berukuran 4 KB. |
| Slab | Mengalokasikan potongan memori kecil di atas buddy system. |
| Vmalloc | Mengalokasikan memori dengan pemetaan nonlinear di atas buddy system. |
| Page cache (filecache) | Linux menyimpan cache konten file di memori agar akses berikutnya lebih cepat. |
| Anonymous memory | Memori yang dialokasikan secara dinamis ke heap dan stack suatu proses melalui new, malloc, atau mmap. Tidak didukung oleh sistem file. |
| Shared memory | Blok memori yang dibagikan oleh dua proses atau lebih untuk komunikasi antar-proses. |
| tmpfs | Sistem file sementara Linux yang didukung oleh memori. Semua operasi baca dan tulis di-cache di memori. |
| hugetlb | Memori yang dikonsumsi oleh huge page dalam sistem file. |
Detail THP
Transparent Huge Pages (THP) adalah huge page berukuran 2 MiB atau 1 GiB di kernel. Setiap subhalaman berukuran 4 KiB, sehingga satu THP 2-MiB setara dengan 512 subhalaman.
Dengan THP diaktifkan, kernel secara dinamis mengalokasikan THP untuk mengurangi Translation Lookaside Buffer (TLB) miss dan meningkatkan kinerja. Namun, THP dapat menyebabkan pembengkakan memori dan overcommitment: ketika aplikasi hanya meminta 8 KiB (2 subhalaman), kernel mengalokasikan satu THP 2-MiB penuh—menyisakan 510 subhalaman nol yang memboroskan resident set size (RSS) dan dapat memicu error OOM.
Metrik memori kernel
Dalam kebanyakan kasus, kebocoran memori ditunjukkan oleh penggunaan abnormal pada Sunreclaim atau buddy system. Pantau metrik ini secara ketat.
| Metrik | Deskripsi |
|---|---|
| SReclaimable | Memori yang dapat direklaim oleh Slab. |
| Sunreclaim | Memori yang tidak dapat direklaim oleh Slab. Pertumbuhan abnormal sangat mengindikasikan memory leak pada kernel. |
| PageTables | Memori yang ditempati oleh tabel halaman kernel. |
| Vmalloc | Memori yang dialokasikan oleh Vmalloc. |
| KernelStack | Total memori stack kernel yang digunakan oleh proses. |
| AllocPages | Memori yang dialokasikan dari buddy system oleh fungsi seperti alloc_pages. Tidak dapat diambil melalui file node apa pun — penggunaan berlebihan menciptakan black hole memori. |
Metrik memori aplikasi
Saat menganalisis penggunaan memori mode pengguna, fokuslah pada memori anonim, shared memory, dan page cache.
| Metrik | Deskripsi |
|---|---|
| filecache | Page cache yang dapat direklaim dengan menjalankan drop caches. |
| anon | Memori anonim yang digunakan oleh heap dan stack program. Penggunaan tinggi mengindikasikan memory leak pada proses atau THP yang diaktifkan. |
| mlock | Memori yang dikunci oleh sistem. |
| huge | Memori yang digunakan oleh huge page. |
| buffer | Memori yang digunakan oleh metadata perangkat blok dan sistem file. |
| shmem | Shared memory (tmpfs). Kebocoran terjadi jika file tmpfs tidak dihapus setelah proses berakhir, atau jika file dihapus saat masih terbuka. |
Memory analysis
Menyediakan dua tampilan: process memory dan pod memory.
Process memory
Menampilkan daftar proses yang diurutkan berdasarkan penggunaan memori serta rincian memori anonim, page cache, dan shared memory.
Pod memory
Menunjukkan file yang menempati page cache dan shared memory di setiap kontainer dan Pod, beserta rasio cache aktif dan tidak aktif.
| Item diagnostik | Deskripsi |
|---|---|
| Pod | Nama Pod. |
| Container | Nama kontainer. |
| File | Jalur lengkap file, termasuk nama file. |
| Cache | Page cache (filecache) yang ditempati oleh file. |
| Container Cache | Cache tingkat kontainer yang ditempati oleh file. Beberapa proses dalam kontainer yang sama dapat mereferensikan file yang sama. |
| Active Cache | Page cache yang sedang digunakan. |
| Inactive Cache | Page cache yang tidak digunakan dan memenuhi syarat untuk direklaim. |
OOM analysis
Mendiagnosis error kehabisan memori (out-of-memory) melalui item berikut.
| Item diagnostik | Deskripsi |
|---|---|
| OS OOM Count | Total error OOM sejak startup host hingga diagnosis. |
| Available Memory | Memori sistem bebas saat ini. |
| Low Watermark | Ambang batas memori rendah. Saat memori yang tersedia turun di bawah nilai ini, kernel memicu reklamasi memori secara asinkron. |
| Container | Nama Pod, ID kontainer, atau nama cgroup. |
| limit | Batas memori yang dikonfigurasi untuk kontainer. |
| usage | Penggunaan memori kontainer saat ini. |
| OOM Count | Total error OOM dalam kontainer. |
| OOM Type | Jenis error OOM: Host atau cgroup. |