Memori yang tidak dibebaskan menumpuk sedikit demi sedikit, lalu beberapa hari kemudian berujung pada GC yang berjalan tanpa henti, swap, atau proses yang dihentikan paksa.
Mengapa Data karakter yang sudah logout dan event handler tidak dibebaskan → Akibatnya Memori bebas berkurang selama beberapa hari → Di layar Normal tepat setelah maintenance, makin hari makin lag, akhirnya server down
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Analisis heap dump, jalankan load test jangka panjang.
Tugas Tim Infrastruktur
Pantau tren penggunaan memori per proses dan pasang alert.
Di grafik
Naik perlahan · Memori proses (RSS), heap tepat setelah GC
Yang diperiksa
Periksa memori proses server game (RSS di pidstat -r) dalam rentang beberapa hari, dan untuk server yang memakai GC, periksa heap yang tersisa tepat setelah GC. Java: nilai setelah GC dari pasangan penggunaan sebelum dan sesudah GC di baris -Xlog:gc; .NET: ukuran heap setelah GC di dotnet-counters (.NET 9 ke atas: dotnet.gc.last_collection.heap.size, 8 ke bawah: GC Heap Size)
Cocok jika
Heap yang tersisa tepat setelah GC (garis dasar) naik setiap hari sejak restart, dan tetap tidak turun pada dini hari saat pemain sedikit
Tidak cocok jika
Garis dasar heap datar tetapi hanya RSS yang naik: lebih mungkin fragmentasi (mem-fragment) atau native memory. Naik turun mengikuti jumlah pemain: penggunaan normal
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Jika server dimulai ulang setiap minggu saat maintenance rutin, kebocoran tertutupi dan lama tidak ketahuan. Kebocoran sering baru muncul tiba-tiba saat maintenance tertunda sekali saja, atau saat jumlah pemain bertambah karena event.
Sumber
Troubleshoot Memory LeaksOracle Jika eksekusi makin lambat, curigai kebocoran; akhirnya memori habis dan terjadi terminasi abnormal. Data utama untuk analisis kebocoran adalah heap dump
Debug a memory leak in .NET.NET Walaupun ada GC, objek yang tidak diperlukan tetapi terus direferensikan menjadi kebocoran, yang menyebabkan penurunan performa dan OutOfMemoryException. Memeriksa tren memori dan menganalisis dump