๐ Daftar Isi
- Log Asli: Apa Sebenarnya yang Terjadi?
- Baris 1-5: Signal 15 (SIGTERM) โ graceful kill
- Baris 6-8: Signal 9 (SIGKILL) โ forced kill
- Baris 9-10: Netdata OOM Protection
- Kenapa Netdata Plugin yang Jadi Korban?
- Dampak ke VPS yang Berada di Hardware Node Tersebut
- 1. Monitoring VPS Hilang Sementara
- 2. VPS Tidak Langsung Terdampak (Untungnya)
- 3. Risiko di Masa Depan
- 4. Performa VPS Bisa Menurun
- Troubleshooting: Commands yang Perlu Dijalankan
- Step 1: Cek dmesg untuk Detail OOM Kill
- 2. Identifikasi Proses Boros RAM
- 3. Cek Apakah Ada Memory Leak
- Root Cause: Kenapa RAM Bisa Habis?
Berdasarkan log yang kita analisis, ada beberapa kemungkinan root cause:
KemungkinanPenjelasanCara Cek
VPS overcommit RAMTotal RAM yang dialokasikan ke semua VPS melebihi RAM fisik hostBandikan total RAM allocation VPS vs RAM fisik host
Memory leak di aplikasiAplikasi di salah satu VPS bocor memory (tidak melepaskan RAM yang sudah dipakai)Monitor RAM usage per VPS selama 24 jam, cari yang terus naik
Burst RAM habisVPS dengan burst RAM memanfaatkan RAM host melebihi alokasi normalCek VPS yang pakai burst RAM tinggi
Netdata memory bloatNetdata sendiri menghabiskan banyak RAM untuk caching data historisCek RAM usage Netdata: ps aux | grep netdata
Kernel slab cache tinggiKernel menggunakan banyak RAM untuk inode cache, dentry cache, dllslabtop -s cSolusi & Pencegahan
- 1. Optimasi Netdata Memory Usage
- 2. Set OOM Score Adjustment untuk Proses Kritis
- 3. Monitor RAM Usage Secara Proaktif
- 4. Batasi RAM per VPS
- 5. Identifikasi & Handle VPS yang Overcommit
- Pro Tips dari Pengalaman
- FAQ
- Kesimpulan
Pernah nggak kamu lagi santai kerja, tiba-tiba client WA bilang “server kok mati?” Terus kamu cek monitoring, semua normal-normal aja. Tapi pas baca log hardware node, ada baris-baris aneh yang bikin jantung dag-dig-dug โ ada “Out-Of-Memory” dan “killed” di mana-mana. Ibarat kamu lagi masak di dapur, tiba-tiba listrik padam. Kompor mati, nasi setengah matang, sayurnya belum mateng โ tapi kamu nggak tahu penyebabnya apa: korslet, PLN mati, atau MCB turun?
Kasus seperti ini sering banget saya temui pas handle dedicated server yang jadi host buat puluhan VPS. Log-nya keliatan simpel, cuma beberapa baris grep output. Tapi di balik baris-baris itu, ada cerita besar tentang bagaimana resource RAM habis dan OS nekat “bunuh” proses untuk menjaga stabilitas sistem. Artikel ini akan bongkar habis apa yang sebenarnya terjadi dari log OOM kill yang kamu dapatkan dari hardware node, dan yang lebih penting โ apa dampaknya ke VPS-VPS yang hosted di atasnya.
Log Asli: Apa Sebenarnya yang Terjadi?
Oke, kita mulai dari log yang kamu dapatkan. Ini output dari command grep di hardware node:
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309738 (request 6) killed by signal 15: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/debugfs.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309758 (request 9) killed by signal 15: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/apps.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309775 (request 12) killed by signal 15: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/systemd-journal.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309807 (request 17) killed by signal 15: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/network-viewer.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 4189230 (request 8497) killed by signal 15: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/tc-qos-helper.sh 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309753 (request 8) killed by signal 9: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/go.d.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309781 (request 13) killed by signal 9: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/ebpf.plugin 1"
Jul 25 03:06:24 vm-server-32 spawn-plugins[2308522]: SPAWN SERVER: child with pid 2309725 (request 4) killed by signal 9: /bin/sh -c "exec /opt/netdata/usr/libexec/netdata/plugins.d/journal-viewer-plugin 1"
Jul 25 03:06:55 vm-tvi-32 netdata[104923]: Out-Of-Memory (OOM) score is already set to the wanted value 0
Jul 25 03:06:56 vm-tvi-32 netdata[104923]: DBENGINE memory protection enabled. Netdata will limit DBENGINE memory usage to help keep at least 5GiB of system RAM available when possible and reduce OOM risk. System memory total: 219.78GiB, currently available: 42.19GiB, use all RAM for caches: disabled
Nah, kita bedah baris per baris ya biar jelas.
Baris 1-5: Signal 15 (SIGTERM) โ graceful kill
Lima proses Netdata plugin di-kill pakai signal 15 (SIGTERM). Ini adalah “cara sopan” OS minta proses untuk berhenti. Signal 15 itu kayak kamu ngetok pintu rumah orang โ “Permisi, tolong keluar ya.” Proses masih diberi waktu buat cleanup sebelum mati.
Plugin yang kena signal 15:
- debugfs.plugin โ debugging filesystem
- apps.plugin โ monitoring per-application resource usage
- systemd-journal.plugin โ log collection dari systemd journal
- network-viewer.plugin โ monitoring koneksi jaringan
- tc-qos-helper.sh โ traffic control & QoS management
Baris 6-8: Signal 9 (SIGKILL) โ forced kill
Tiga proses lainnya di-kill pakai signal 9 (SIGKILL). Ini versi “kasar” โ langsung dibunuh tanpa ampun. Sama kayak kamu dobrak pintu rumah orang. Proses nggak bisa cleanup, langsung dihentikan paksa. Signal 9 ini biasanya muncul kalau proses nggak mau mati meskipun sudah dikasih SIGTERM.
Plugin yang kena signal 9:
- go.d.plugin โ Go-based data collection module
- ebpf.plugin โ eBPF-based kernel monitoring
- journal-viewer-plugin โ log viewer
Baris 9-10: Netdata OOM Protection
Ini bagian paling penting. Netdata mendeteksi bahwa OOM score-nya sudah diatur ke 0 (artinya Netdata dilindungi dari OOM killer). Tapi yang lebih krusial adalah baris terakhir:
Dengan RAM available yang segitu, dan Netdata mengaktifkan DBENGINE memory protection untuk menjaga minimal 5GiB RAM tersedia, situasi ini menunjukkan bahwa hardware node sedang dalam kondisi RAM usage yang tinggi. Dan ketika RAM makin sempit, OOM killer diaktifkan untuk membunuh proses yang dianggap “boros” RAM.
Kenapa Netdata Plugin yang Jadi Korban?
Pertanyaan bagus. Kenapa proses Netdata yang di-kill, bukan proses VPS atau application lain?
Jadi begini โ Netdata itu jalan di level host (hardware node), bukan di dalam VPS. Netdata mengumpulkan data monitoring dari seluruh sistem, termasuk VPS-VPS yang hosted di atasnya. Proses-proses Netdata plugin itu seperti “pekerja” yang bertugas mengumpulkan data dari berbagai sumber.
Ketika RAM mulai menipis, Linux OOM killer bekerja dengan cara memberikan score ke setiap proses. Proses dengan OOM score tertinggi akan jadi korban pertama. Beberapa plugin Netdata memang menggunakan RAM yang cukup signifikan โ terutama go.d.plugin dan ebpf.plugin yang berjalan di memory-intensive mode.
Dampak ke VPS yang Berada di Hardware Node Tersebut
Ini yang paling kritis. Ketika OOM killer aktif di hardware node, dampaknya ke VPS bisa sangat beragam tergantung situasi:
1. Monitoring VPS Hilang Sementara
Karena Netdata plugin yang di-kill, data monitoring untuk beberapa menit (sampai Netdata restart plugin-nya) tidak tersedia. Kamu nggak akan bisa lihat CPU usage, memory usage, disk I/O, dan network traffic VPS kamu di dashboard Netdata selama periode ini.
2. VPS Tidak Langsung Terdampak (Untungnya)
Dalam kasus ini, yang di-kill adalah proses Netdata di level host, bukan proses di dalam VPS. Jadi VPS-VPS yang berjalan di hardware node tersebut tidak langsung mati atau crash. Mereka tetap berjalan normal. Ini berbeda dengan skenario di mana OOM killer membunuh proses VPS itu sendiri.
3. Risiko di Masa Depan
Kondisi ini adalah early warning. Jika RAM usage di hardware node terus naik dan nggak ditangani, skenario berikutnya bisa lebih parah: OOM killer mulai membunuh proses VPS, yang artinya service di VPS bisa mati mendadak โ website down, database crash, application error.
4. Performa VPS Bisa Menurun
Ketika RAM host menipis, sistem operasi mulai melakukan memory swapping โ memindahkan data dari RAM ke disk (swap space). Swap di disk jauh lebih lambat dibanding RAM, sehingga seluruh sistem (termasuk VPS) bisa mengalami penurunan performa yang signifikan.
Troubleshooting: Commands yang Perlu Dijalankan
Setelah menemukan log OOM kill di hardware node, berikut langkah-langkah yang perlu kamu lakukan:
| Command | Fungsi | Contoh Output |
|---|---|---|
|
Cek penggunaan RAM saat ini | total: 220GiB, used: 178GiB, free: 42GiB |
|
Top 20 proses paling boros RAM | List proses dengan %MEM tertinggi |
|
Cek kernel OOM log | Detail proses yang di-kill oleh OOM killer |
|
Cek system log OOM events | Timestamp dan PID proses yang di-kill |
|
Cek kernel memory cache usage | Detail penggunaan slab allocator |
|
Monitor memory activity real-time | si/so columns (swap in/out) tinggi = bahaya |
|
Detail memory status | MemAvailable rendah = perlu tindakan |
|
Histori OOM kill events | oom_kill counter bertambah = ada OOM event |
Step 1: Cek dmesg untuk Detail OOM Kill
dmesg | grep -i oom
Output-nya akan memberikan detail lebih lengkap tentang proses mana yang di-kill, berapa banyak RAM yang dibutuhkan vs tersedia, dan score OOM dari setiap proses.
2. Identifikasi Proses Boros RAM
ps aux --sort=-%mem | head -20
Dari sini kamu bisa lihat proses mana yang paling banyak makan RAM. Kalau ada VPS tertentu yang RAM usage-nya abnormal tinggi, itu perlu ditindaklanjuti.
3. Cek Apakah Ada Memory Leak
# Monitor selama 5 menit
vmstat 1 300 | tee /tmp/vmstat-monitor.txt
Perhatikan kolom si (swap in) dan so (swap out). Kalau angkanya terus-terusan tinggi, ada masalah memory yang serius.
Root Cause: Kenapa RAM Bisa Habis?
Berdasarkan log yang kita analisis, ada beberapa kemungkinan root cause:
| Kemungkinan | Penjelasan | Cara Cek |
|---|---|---|
| VPS overcommit RAM | Total RAM yang dialokasikan ke semua VPS melebihi RAM fisik host | Bandikan total RAM allocation VPS vs RAM fisik host |
| Memory leak di aplikasi | Aplikasi di salah satu VPS bocor memory (tidak melepaskan RAM yang sudah dipakai) | Monitor RAM usage per VPS selama 24 jam, cari yang terus naik |
| Burst RAM habis | VPS dengan burst RAM memanfaatkan RAM host melebihi alokasi normal | Cek VPS yang pakai burst RAM tinggi |
| Netdata memory bloat | Netdata sendiri menghabiskan banyak RAM untuk caching data historis | Cek RAM usage Netdata: ps aux | grep netdata |
| Kernel slab cache tinggi | Kernel menggunakan banyak RAM untuk inode cache, dentry cache, dll | slabtop -s c |
Solusi & Pencegahan
1. Optimasi Netdata Memory Usage
Netdata sudah mengaktifkan DBENGINE memory protection, tapi kita bisa lebih agresif lagi:
# Edit konfigurasi Netdata
cat /etc/netdata/netdata.conf | grep -A 10 "[db]"
Pastikan setting berikut ada:
[db]
mode = dbengine
storage tier = 3
page cache size = 32M
dbengine disk space = 1G
dbengine multihost disk space = 2G
memory mode = dbengine
OOM score = 0
2. Set OOM Score Adjustment untuk Proses Kritis
# Set OOM score Netdata ke -500 (sangat diproteksi)
echo -500 > /proc/$(pgrep netdata)/oom_score_adj
# Cek OOM score saat ini
cat /proc/$(pgrep netdata)/oom_score_adj
3. Monitor RAM Usage Secara Proaktif
Buat script monitoring sederhana:
#!/bin/bash
# Script: ram-monitor.sh
THRESHOLD=85
AVAILABLE=$(free -m | awk '/^Mem:/{print $7}')
TOTAL=$(free -m | awk '/^Mem:/{print $2}')
USAGE=$((100 - (AVAILABLE * 100 / TOTAL)))
if [ $USAGE -gt $THRESHOLD ]; then
echo "WARNING: RAM usage at ${USAGE}%" | mail -s "RAM Alert" admin@domain.com
# Log ke syslog
logger -p warning "RAM usage critical: ${USAGE}% available: ${AVAILABLE}MB"
fi
Jalankan script ini via cron setiap 5 menit:
*/5 * * * * /root/scripts/ram-monitor.sh
4. Batasi RAM per VPS
Pastikan total RAM allocation untuk semua VPS tidak melebihi 80% dari RAM fisik host. Misalnya, host punya 220GiB RAM, maka total alokasi VPS sebaiknya tidak lebih dari ~176GiB.
5. Identifikasi & Handle VPS yang Overcommit
# List semua VPS dan RAM usage-nya (Proxmox example)
qm list
# Detail RAM usage per VM
for vm in $(qm list | awk 'NR>1{print $1}'); do
echo "VM $vm: $(qm status $vm 2>/dev/null)"
done
Pro Tips dari Pengalaman
Total RAM ร 0.8 รท jumlah VPS. Jangan pernah overcommit โ kasih jatah 20% untuk host OS, kernel, dan Netdata./var/log/messages itu hanya ringkasan. Detail lengkapnya ada di dmesg. Selalu cek dmesg | grep -i oom untuk informasi lebih lengkap.FAQ
Q: Apakah VPS saya langsung mati kalau host-nya kena OOM kill?
A: Nggak langsung. Dalam kasus log di atas, yang di-kill adalah proses Netdata di host, bukan VPS. Tapi ini tanda bahaya โ kalau OOM terus terjadi dan makin parah, VPS kamu bisa jadi korban berikutnya.
Q: Kenapa ada yang kena signal 15 dan ada yang kena signal 9?
A: Signal 15 (SIGTERM) itu permintaan berhenti secara sopan โ OS minta proses untuk cleanup dulu. Signal 9 (SIGKILL) itu paksa mati langsung, nggak ada ampun. Biasanya yang kena signal 9 adalah proses yang nggak mau berhenti meskipun sudah dikasih SIGTERM, atau proses yang dianggap sudah terlalu boros resource.
Q: Bagaimana cara mencegah OOM kill di hardware node?
A: Pastikan total RAM allocation VPS tidak melebihi 80% RAM fisik host. Monitor RAM usage secara proaktif, set OOM score adjustment untuk proses kritis, dan identifikasi VPS yang overcommit sejak dini.
Q: Apakah Netdata yang menyebabkan OOM?
A: Bisa iya, bisa juga tidak. Netdata memang menggunakan RAM untuk caching data, tapi biasanya bukan penyebab utama. Yang lebih sering jadi penyebab adalah VPS-VPS yang overcommit RAM atau aplikasi yang mengalami memory leak. Netdata sendiri sudah punya perlindungan OOM score 0 untuk meminimalkan risiko.
Q: Apakah saya perlu restart Netdata setelah OOM kill?
A: Biasanya Netdata otomatis restart plugin-nya. Tapi kalau Netdata daemon-nya sendiri yang mati, kamu perlu restart manual: systemctl restart netdata. Pastikan untuk cek dulu kenapa bisa sampai mati total.
Kesimpulan
Log OOM kill di hardware node itu bukan hal yang bisa diabaikan. Ibarat lampu check engine di mobil โ mungkin masih bisa jalan, tapi kamu harus segera bawa ke bengkel sebelum mogok di tengah jalan.
Dari analisis log di atas, kita bisa simpulkan bahwa hardware node dengan 220GiB RAM sedang mengalami tekanan memory. Netdata plugin di-kill sebagai bentuk perlindungan, dan situasi ini harus segera ditangani sebelum dampaknya merambat ke VPS-VPS yang hosted di atasnya.
Langkah pertama yang harus kamu lakukan sekarang: cek free -h dan ps aux --sort=-%mem | head -20 di hardware node untuk mengetahui siapa yang paling banyak makan RAM. Dari situ, kamu bisa tentukan langkah selanjutnya โ apakah perlu migrasi VPS, optimasi aplikasi, atau upgrade RAM host.
Jangan tunggu sampai client kamu WA lagi bilang “server mati.” Cegah sekarang, sebelum terlambat.
Butuh bantuan analisis log hardware node atau optimasi resource VPS? Hubungi tim NOC kami untuk konsultasi gratis.