dmesg atau log sistem.
Menemukan Jejak OOM Killer di dmesg
dmesg. Jika server menjalankan systemd, perintah journalctl -k juga bisa digunakan untuk melihat pesan kernel yang tersimpan secara persisten.
Contoh perintah read-only untuk memfilter baris OOM Killer dari log kernel:
BASH
sudo dmesg -T | grep -i -E 'oom[-_]killer|killed process'Out of memory: Killed process <PID> (<nama_proses>). Di sekitar baris tersebut, kernel juga biasanya menyertakan daftar proses lengkap dengan jumlah halaman memori virtual (vsize) dan memori fisik yang dialokasikan (rss atau resident set size) pada saat insiden terjadi.
Penting dipahami bahwa proses yang dimatikan belum tentu merupakan biang kerok utama yang menghabiskan memori. OOM Killer menggunakan perhitungan skor (badness heuristic) yang mempertimbangkan seberapa banyak memori yang digunakan proses tersebut serta nilai preferensi sistem (oom_score_adj). Sering kali worker background yang menghabiskan RAM secara masif, tetapi database yang justru dimatikan karena memegang alokasi memori aktif terbesar saat itu.
Jika layanan kamu dikelola oleh systemd dan mati tiba-tiba, ada baiknya juga meninjau status keluaran service. Pada artikel terkait, kita pernah membahas cara melacak status exit systemd untuk melihat sinyal terminasi yang diterima service, seperti sinyal SIGKILL (Signal 9) yang dipicu oleh kernel.
Memilih Solusi: Tiga Opsi Mengatasi Masalah Memori
Opsi 1: Menambah Kapasitas Swap atau RAM Fisik (Vertical Scaling)
- Beban kerja (Workload): Server tunggal yang menjalankan database dengan pertumbuhan data stabil, atau aplikasi monolithic yang lonjakan memorinya bisa diprediksi.
- Kebutuhan keahlian (Skill level): Rendah. Menambah RAM di VPS atau membuat file swap hanya membutuhkan beberapa perintah administratif.
- Risiko: Menambah swap di disk yang lambat (HDD atau I/O cloud terbatas) dapat memicu thrashing, di mana CPU habis hanya untuk membaca dan menulis swap sehingga server menjadi sangat lambat.
Opsi 2: Membatasi Konkurensi Worker dan Proses Anak
- Beban kerja (Workload): Aplikasi web dengan lalu lintas fluktuatif atau server yang menjalankan pemrosesan berkas di latar belakang.
- Kebutuhan keahlian (Skill level): Menengah. Perlu menghitung rata-rata pemakaian RAM per worker dan menyesuaikan batas maksimal proses (misalnya
pm.max_childrenpada PHP-FPM). - Risiko: Jika batasan worker terlalu ketat, antrean permintaan akan menumpuk dan pengguna bisa mengalami connection timeout atau respon yang lambat saat jam sibuk.
Opsi 3: Tuning Alokasi Memori Aplikasi (Buffer & Pool)
- Beban kerja (Workload): Dedicated database server atau VPS gabungan (LAMP stack) di mana alokasi database bersaing langsung dengan web server.
- Kebutuhan keahlian (Skill level): Menengah hingga tinggi. Memerlukan pemahaman tentang arsitektur internal database, alokasi memori per thread, dan alokasi global.
- Risiko: Menyetel buffer terlalu kecil akan meningkatkan I/O disk (karena cache sering miss), yang berdampak pada penurunan performa query secara keseluruhan.
Panduan Komparasi Pengambilan Keputusan
| Pendekatan | Biaya / Resource | Waktu Implementasi | Kapan Sebaiknya Dipilih | Kapan Harus Dihindari |
|---|---|---|---|---|
| Vertical Scaling (RAM / Swap) | Biaya infrastruktur bertambah | Sangat cepat | Memori server konsisten di atas 90% sepanjang hari tanpa ada lonjakan aneh | Ada indikasi memory leak pada aplikasi yang tidak kunjung reda |
| Limitasi Worker | Gratis (konfigurasi sistem) | Cepat (butuh observasi) | OOM hanya terjadi saat lonjakan pengunjung atau lonjakan job antrean | Aplikasi membutuhkan pemrosesan throughput tinggi yang tidak bisa ditunda |
| Tuning Buffer Aplikasi | Gratis (konfigurasi aplikasi) | Bertahap (memerlukan uji beban) | Database memakan porsi terbesar dan sering dimatikan OOM Killer | Beban kerja read/write sangat intensif dan memang membutuhkan cache besar |
dmesg sebelum berasumsi bahwa aplikasi mengalami crash internal. Dari data alokasi memori di log tersebut, kamu bisa menentukan apakah masalahnya diselesaikan dengan membatasi proses yang tamak, menyeimbangkan parameter internal aplikasi, atau memang sudah saatnya menaikkan spesifikasi server.