Jika beberapa proses berbagi satu port, kernel menetapkan proses yang menangani setiap koneksi berdasarkan hash alamat dan tidak mengubahnya. Jika satu proses itu berhenti, hanya pemain yang dialokasikan ke proses tersebut yang menunggu.
Mengapa Gateway atau server login menjalankan beberapa proses dengan SO_REUSEPORT → Akibatnya Walaupun satu proses berhenti karena GC atau kelebihan beban, koneksi baru dan paket UDP yang dialokasikan ke proses itu tidak dialihkan ke proses lain → Di layar Hanya sebagian pemain yang tidak bisa masuk atau freeze. Saat restart yang mengubah jumlah proses, sebagian sesi UDP terputus
Tepat setelah login atau maintenance, Sesekali secara acak
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Pastikan thread penerima tidak pernah tertahan, implementasikan prosedur serah terima sesi saat restart.
Tugas Tim Infrastruktur
Pantau antrean koneksi per proses (Recv-Q di ss), pastikan prosedur serah terima sesi diikuti jika jumlah proses diubah saat deploy.
Di grafik
Hanya sebagian yang tinggi · Antrean koneksi (Recv-Q) per socket listen
Yang diperiksa
Periksa Recv-Q (jumlah koneksi yang menunggu accept) dan proses yang menangani setiap socket listen pada port yang sama dengan ss -ltnp, lalu bandingkan throughput per proses
Cocok jika
Di antara beberapa socket pada port yang sama, hanya satu yang Recv-Q-nya terus menumpuk, dan proses itu sedang berhenti atau throughput-nya mendekati 0
Tidak cocok jika
Recv-Q semua socket menumpuk merata: lebih mungkin kelebihan beban secara keseluruhan (“Antrean koneksi (backlog) meluap”)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Sumber
socket(7) — Linux manual pageLinux man-pages Dengan SO_REUSEPORT, beberapa socket bind ke alamat yang sama dan berbagi koneksi TCP serta paket UDP
net/core/sock_reuseport.c (Linux v6.12)Linux kernel Tanpa program BPF, socket yang menangani dipilih dengan membagi nilai hash paket sesuai jumlah socket dalam grup
Why does one NGINX worker take all the load?Cloudflare SO_REUSEPORT membagi antrean per worker dengan hash sederhana, sehingga jika satu worker tertahan, semua koneksi yang menumpuk di antreannya ikut berhenti
net/ipv4/tcp_diag.c (Linux v6.12)Linux kernel Nilai Recv-Q dan Send-Q di ss: pada socket listen berarti jumlah koneksi yang menunggu accept dan batas backlog; pada socket yang terhubung berarti byte yang belum dibaca aplikasi dan byte terkirim yang belum mendapat ACK