Apa yang bisa kami bantu?

A. Pendahuluan

Out of Memory (OOM) terjadi ketika server kehabisan RAM sehingga sistem tidak dapat menjalankan proses secara 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. Periksa indikator berikut untuk memastikan kondisi OOM sedang terjadi:

  • 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 paling besar. Lakukan langkah berikut:

  • Login ke server melalui SSH.
  • Jalankan perintah berikut untuk menampilkan penggunaan RAM dan swap secara ringkas:
    free -h
  • Gunakan perintah berikut untuk melihat proses dengan 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. Lakukan langkah pengecekan 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 di atas:
    [ 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 apakah proses masih berjalan, melihat jumlah proses aktif, mengetahui konsumsi CPU dan memori, serta 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 berikut untuk menstabilkan server:

  • Hentikan proses yang tidak penting menggunakan perintah berikut (ganti PID dengan nomor PID service yang ingin dihentikan):
    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. Lakukan langkah berikut:

  • 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. Lakukan langkah berikut untuk menganalisis sumber beban:

  • 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, gunakan 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 yang berjalan bersamaan dapat memicu lonjakan penggunaan memori di dalam 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 sebelum melanjutkan.

  • Periksa kembali log dengan menjalankan perintah berikut:
    dmesg | grep -i oom
  • Restart layanan terkait terlebih dahulu sebelum melakukan restart server, karena restart service lebih aman dibanding reboot 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 melibatkan restart server, tetapi juga mencakup pemeriksaan penggunaan memory, analisis log sistem, serta identifikasi proses penyebab lonjakan RAM. Dengan menjalankan 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.