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

Buku Putih Lag Game › L8 Socket dan protokol

Distribusi SO_REUSEPORT tidak merata SO_REUSEPORT imbalance, stuck worker

ID penyebab sk-reuseport · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

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

Gejala
Tidak bisa masuk / loading tanpa henti, Freeze, Disconnect
Faktor
Stall, Packet loss
Siapa yang mengalami
Hanya saya, Seluruh server
Kapan
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

  1. socket(7) — Linux manual page Linux man-pages
    Dengan SO_REUSEPORT, beberapa socket bind ke alamat yang sama dan berbagi koneksi TCP serta paket UDP
  2. 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
  3. 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
  4. 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: L8 Socket dan protokol

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

Lihat kartu interaktif dengan gambar dan simulasi