한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Buku Putih Lag Game › L7 OS server (kernel)

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)

Buka kartu interaktif dengan gambar dan simulasi →

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

Gejala
Tidak bisa masuk / loading tanpa henti
Faktor
Packet loss
Siapa yang mengalami
Seluruh server
Kapan
Tepat setelah login atau maintenance
Penanggung jawab
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

  1. listen(2) — Linux manual page Linux 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
  2. IP Sysctl Linux 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
  3. listen function (winsock2.h) Microsoft
    Di Windows, jika antrean penuh, klien menerima error WSAECONNREFUSED
  4. SNMP counter Linux kernel
    TcpExtListenOverflows: jumlah permintaan koneksi (SYN) yang dibuang karena antrean accept penuh; saat itu TcpExtListenDrops juga ikut naik
  5. 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

Lihat juga

Lapisan yang sama: L7 OS server (kernel)

Penyebab di lapisan lain dengan gejala yang sama (Tidak bisa masuk / loading tanpa henti)

Lihat kartu interaktif dengan gambar dan simulasi