Apa yang bisa kami bantu?

A. Pendahuluan

Out of Memory (OOM) terjadi ketika server kehabisan RAM sehingga sistem tidak dapat menjalankan proses dengan normal. Kondisi ini dapat menyebabkan layanan berhenti, server menjadi lambat, atau sistem melakukan restart otomatis. Artikel ini menjelaskan langkah mitigasi awal dan cara mengidentifikasi penyebab OOM sebelum melakukan tindakan lanjutan.


B. Langkah-Langkah Penanganan

1. Mengidentifikasi Gejala Out of Memory

Kenali tanda-tanda server mengalami OOM.

Langkah pembenahan :

  • Periksa apakah layanan menjadi lambat atau tidak responsif.
  • Cek apakah proses tertentu berhenti secara tiba-tiba.
  • Periksa apakah server melakukan restart otomatis.
  • Pastikan terdapat pesan error terkait memory pada aplikasi atau sistem.

2. Mengecek Penggunaan Memory Secara Real-Time

Periksa penggunaan RAM untuk mengetahui proses yang menggunakan memory besar.

Langkah pembenahan :

  • Login ke server melalui SSH.
  • Jalankan perintah berikut untuk menampilkan penggunaan RAM dan swap secara ringkas  :
    free -h
  • Gunakan perintah berikut untuk melihat proses penggunaan RAM tertinggi :
    top
    atau
    htop
  • Identifikasi proses yang menggunakan memory secara berlebihan.

3. Mengecek Log Sistem Penyebab OOM

Log sistem membantu mengidentifikasi proses yang dihentikan oleh kernel akibat kehabisan memory.

Langkah pengecekannya sebagai berikut :

  • Jalankan perintah berikut untuk melihat log OOM:
    dmesg | grep -i oom
  • Alternatif lain, periksa system log:
    grep -i "out of memory" /var/log/syslog
    atau
    grep -i "oom" /var/log/messages
  • Catat proses (PID) yang dihentikan oleh OOM Killer.
    Log OOM biasanya muncul pada dmesg atau log sistem ketika kernel menghentikan proses karena RAM habis. Contoh output log OOM dari perintah diatas seperti berikut : 
    [ 2456.123456] Out of memory: Kill process 18765 (php-fpm) score 892 or sacrifice child
    [ 2456.123789] Killed process 18765 (php-fpm) total-vm:2048000kB, anon-rss:512000kB
    Feb 10 14:22:31 server kernel: Out of memory: Kill process 2214 (mysqld) score 745
    Feb 10 14:22:31 server kernel: Killed process 2214 (mysqld) total-vm:3124576kB
  • Identifikasi aplikasi penyebab lonjakan penggunaan memory. 
    Setelah menemukan nama proses dari log OOM (misalnya php-fpm, mysqld, atau java), jalankan perintah berikut untuk mengetahui proses masih berjalan atau tidak, melihat jumlah proses aktif, mengetahui konsumsi CPU dan memori dan mendeteksi kemungkinan worker berlebihan atau memory leak :
    ps aux | grep php-fpm
    Note : ganti php-fpm dengan nama proses yang ditemukan pada log.
    Contoh outputnya seperti berikut : 
    www-data 18765 5.2 25.3 2048000 512000 ? S 10:22 0:35 php-fpm: pool www
    Kolom penting yang perlu diperhatikan pada output perintah top atau htop di poin 2 :
    -    PID → ID proses
    -    %MEM → persentase penggunaan RAM
    -    RSS/RES → jumlah RAM yang digunakan proses
    -    COMMAND → nama proses
gambar 1. contoh tampilan htop

4. Menghentikan atau Mengoptimalkan Proses Bermasalah

Setelah mengetahui proses penyebab OOM, lakukan tindakan untuk menstabilkan server.

Langkah pembenahan:

  • Hentikan proses yang tidak penting menggunakan perintah berikut (ganti PID dengan nomor PID service yang ingin di hentikan) :
    kill -9 PID
  • Restart service yang bermasalah jika diperlukan.
  • Optimalkan konfigurasi aplikasi agar penggunaan memory lebih efisien.
  • Kurangi jumlah worker atau thread pada aplikasi jika terlalu besar.

5. Mengaktifkan dan Mengoptimalkan Swap Memory

Swap memory membantu sistem tetap berjalan ketika RAM utama penuh.

  • Periksa swap yang tersedia dengan perintah berikut :
  • Jika belum tersedia, buat swap file sesuai kebutuhan.
  • Aktifkan swap untuk membantu menahan lonjakan penggunaan memory.
  • Pastikan penggunaan swap tidak berlebihan karena dapat mempengaruhi performa.

6. Melakukan Analisis Beban Aplikasi
Beban aplikasi yang tinggi dapat menyebabkan penggunaan memory meningkat drastis. Anda bisa lakukan langkah berikut :

  • Periksa lonjakan trafik atau aktivitas pengguna.
    Gunakan perintah berikut untuk melihat jumlah load server dan beban rata-rata :
    uptime
    Gunakan perintah berikut untuk melihat jumlah user yang sedang login :
    who
    Gunakan perintah berikut untuk menghitung koneksi aktif ke web server (HTTP) :
    netstat -an | grep :80 | wc -l
    Jika koneksi sangat banyak, lonjakan trafik dapat meningkatkan penggunaan RAM.
     
  • Analisis query database yang berat atau tidak optimal.
    Untuk MySQL/MariaDB bisa menggunakan perintah berikut untuk menampilkan query yang sedang berjalan. :
    mysqladmin processlist
    atau jalankan perintah berikut di dalam MySQL untuk mendeteksi query lambat atau menumpuk :
    SHOW FULL PROCESSLIST;
    Gunakan perintah berikut untuk melihat query lambat (jika slow log aktif): :
    tail -f /var/log/mysql/slow.log
  • Periksa script atau cron job yang berjalan bersamaan.
    Gunakan perintah berikut untuk melihat cron yang aktif :
    crontab -l
    Gunakan perintah berikut untuk melihat cron system-wide :
    ls /etc/cron*
    Gunakan perintah berikut untuk melihat proses yang berjalan saat ini :
    ps aux --sort=-%mem | head
    Pemeriksaan ini diperlukan karena Cron job bersamaan dapat memicu lonjakan penggunaan memori didalam server.
     
  • Optimalkan konfigurasi aplikasi dan database.
    Gunakan perintah berikut untuk cek konfigurasi MySQL buffer :
    mysql -e "SHOW VARIABLES LIKE '%buffer%';"
    Gunakan perintah berikut untuk cek jumlah worker PHP-FPM, karena Worker yang berlebihan dapat menghabiskan RAM :
    ps aux | grep php-fpm | wc -l

7. Restart Service atau Server (Jika Diperlukan)
Restart dapat menjadi langkah terakhir setelah mitigasi awal dilakukan.

  • Pastikan penyebab OOM telah diidentifikasi.
    Periksa kembali log degan menjalankan perintah berikut :
    dmesg | grep -i oom
  • Restart layanan terkait terlebih dahulu sebelum melakukan restart server karena melakukan restart service lebih aman dibanding reboot/restart server.

    Gunakan perintah berikut untuk Restart PHP-FPM :
    systemctl restart php-fpm
    Gunakan perintah berikut untuk Restart MySQL :
    systemctl restart mysqld
    Gunakan perintah berikut untuk Restart Nginx :
    systemctl restart nginx
    Gunakan perintah berikut untuk Restart Apache :
    systemctl restart httpd
  • Jika server masih tidak stabil, lakukan reboot/restart server.
     
  • Monitor penggunaan memory setelah server aktif kembali.
    Gunakan perintah berikut untuk melihat penggunaan RAM :
    free -h
    Gunakan perintah berikut untuk memantau proses dan penggunaan resource :
    top
    Gunakan perintah berikut untuk memantau memori secara real-time :
    watch -n 2 free -h

C. Kesimpulan

Out of Memory (OOM) dapat menyebabkan layanan server terganggu dan downtime. Mitigasi awal tidak hanya melakukan restart server, tetapi juga mencakup pemeriksaan penggunaan memory, analisis log sistem, serta identifikasi proses penyebab lonjakan RAM. Dengan melakukan langkah-langkah tersebut, stabilitas server dapat dipulihkan dan risiko kejadian berulang dapat diminimalkan.

Semoga artikel ini dapat membantu Anda. Temukan bantuan lainnya melalui Knowledge Base Biznet Gio. Jika Anda masih memiliki kendala silakan hubungi Support Biznet GIO melalui email support@biznetgio.com atau live chat maupun WA ke website www.biznetgio.com dan bisa juga melalui telepon ke nomor (021) 5714567.