Antrean koneksi (backlog) meluap Listen backlog / SYN queue overflow
ID penyebab so-backlog · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur), Pengembangan klien (Tim Pengembang Game)
Jika puluhan ribu pemain login bersamaan tepat setelah maintenance, antrean koneksi (backlog) di kernel meluap dan upaya koneksi dibuang.
Mengapa Begitu maintenance selesai, koneksi berdatangan lebih cepat daripada kecepatan server game memprosesnya dengan accept → Akibatnya Antrean koneksi kernel (backlog, yaitu nilai yang lebih kecil antara nilai yang diberikan kode server ke listen dan batas atas kernel) penuh → Di layar Upaya koneksi dibuang dan percobaan ulang terus berulang, sehingga pemain tidak bisa masuk atau mengalami loading tanpa henti
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur), Pengembangan klien (Tim Pengembang Game)
Tugas Tim Pengembang Game
Server: naikkan nilai listen yang diberikan di kode, jaga agar thread yang menerima koneksi tidak tertahan oleh pekerjaan lain, gunakan sistem antrean login. Klien: perpanjang interval percobaan ulang (disebar secara acak).
Tugas Tim Infrastruktur
Naikkan somaxconn di kernel (baru efektif jika nilai listen di kode server juga dinaikkan), biarkan SYN cookie tetap aktif, pantau jumlah overflow (TcpExtListenOverflows di nstat).
Kisaran angka
Batas atas kernel Linux (somaxconn) secara default 4.096 sejak versi 5.4 (sebelumnya 128), tetapi jika kode server memberikan nilai yang lebih kecil ke listen, nilai itulah yang menjadi batasnya. Saat antrean penuh, Linux membuang permintaan koneksi diam-diam tanpa error. OS klien mengirim ulang permintaan beberapa kali mulai 1 detik kemudian, sehingga yang dilihat pemain adalah loading yang lama, tanpa pesan “Koneksi gagal”. Server Windows mengirim balik respons penolakan, sehingga klien langsung melihat “Koneksi gagal”.
Di grafik
Melonjak tepat setelah server dibuka · Jumlah overflow antrean koneksi (ListenOverflows), jumlah upaya koneksi
Yang diperiksa
Periksa kenaikan TcpExtListenOverflows dan TcpExtListenDrops di nstat -az, lalu dengan ss -ltn bandingkan Recv-Q (jumlah koneksi yang menunggu accept) dan Send-Q (batas backlog) pada socket listen
Cocok jika
ListenOverflows naik saat koneksi membanjir, dan Recv-Q socket listen menempel di nilai Send-Q
Tidak cocok jika
ListenOverflows tidak berubah: bukan penyebab ini. Koneksi sudah terbentuk tetapi loading tidak selesai: lebih mungkin “Lonjakan login dan N+1 query”. Tertahan tepat di jumlah pemain tertentu: lebih mungkin “Batas file descriptor”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Sumber
listen(2) — Linux manual pageLinux man-pages backlog pada listen dipotong diam-diam jika melebihi somaxconn; somaxconn default 4.096 (sejak 5.4, sebelumnya 128); saat antrean penuh, permintaan bisa diabaikan dan diserahkan ke percobaan ulang klien
IP SysctlLinux kernel tcp_syn_retries: permintaan koneksi (SYN) dikirim ulang beberapa kali dengan jeda retransmisi pertama 1 detik; tcp_abort_on_overflow default nonaktif (tidak ada respons penolakan walaupun antrean meluap); tcp_syncookies default aktif
SNMP counterLinux kernel TcpExtListenOverflows: jumlah permintaan koneksi (SYN) yang dibuang karena antrean accept penuh; saat itu TcpExtListenDrops juga ikut naik
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