Jika memori kurang dan OS memindahkan sebagiannya ke disk, setiap kali memori itu dipakai, proses harus menunggu disk yang lebih dari 1.000 kali lebih lambat.
Mengapa Memori yang dipakai melebihi RAM fisik → Akibatnya OS memindahkan sebagian memori ke disk dan membacanya lagi saat dibutuhkan → Di layar Tick melonjak hingga ratusan ms, sehingga semua pemain di server mengalami slow motion dan freeze
Penanggung jawab utama Infrastruktur server (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Beri batas atas penggunaan memori proses (ukuran heap dan sebagainya), periksa kebocoran.
Tugas Tim Infrastruktur
Atur server game agar tidak memakai swap, tangani lewat alert memori, sediakan RAM yang lebih longgar daripada penggunaan puncak karena tanpa swap proses langsung dihentikan paksa (OOM) begitu memori kurang.
Kisaran angka
Baca RAM sekitar 100 ns, baca ulang dari SSD sekitar 100 µs (1.000 kali), disk cloud di seberang jaringan sekitar 1 ms (10.000 kali), HDD 10 ms (100.000 kali).
Di grafik
Naik perlahan · Penggunaan swap, swap in/out
Yang diperiksa
Tumpangkan kolom si dan so di vmstat 1 (jumlah yang dibaca dari swap dan dikirim ke swap per detik), some dan full di /proc/pressure/memory (rasio waktu tertahan karena menunggu memori), serta majflt/s dari pidstat -r untuk proses server game (page fault yang harus dibaca dari disk) dengan waktu tick
Cocok jika
Saat lag terjadi, si lebih besar dari 0, dan majflt/s server game serta nilai full di PSI memory ikut naik
Tidak cocok jika
si dan so 0, dan tekanan memori (PSI memory) juga mendekati 0: swap bukan penyebabnya. Tidak ada swap tetapi majflt/s dan PSI naik: memori habis sehingga code page dibaca ulang, jadi tambah memori terlebih dahulu
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Server yang memakai GC membaca berbagai bagian heap saat pengumpulan, jadi walaupun hanya sebagian heap yang masuk swap, satu kali GC bisa memanjang menjadi beberapa hingga puluhan detik. Jika swap dimatikan, server langsung dihentikan paksa (OOM) tanpa melewati tahap melambat karena swap, jadi sediakan memori cadangan terlebih dahulu. Walaupun tanpa swap, jika memori hampir habis, OS juga mengeluarkan code page file executable dari memori lalu membacanya lagi, sehingga seluruh server bisa sangat lambat untuk beberapa waktu sebelum dihentikan paksa.
Documentation for /proc/sys/vm/Linux kernel swappiness: biaya relatif antara swap dan pengambilan kembali file page; swap mahal karena berupa I/O acak
Concepts overviewLinux kernel Kernel mengambil kembali page cache yang aslinya tersimpan di disk dan page yang bisa di-swap; jika masih kurang, OOM killer mematikan proses
vmstat(8) — Linux manual pageprocps-ng si: memori yang dibaca dari swap per detik, so: memori yang dikirim ke swap per detik
PSI - Pressure Stall InformationLinux kernel some (rasio waktu sebagian task tertahan) dan full (rasio waktu semua task tertahan bersamaan) di /proc/pressure/memory