Teilen sich mehrere Prozesse denselben Port, legt der Kernel für jede Verbindung per Adress-Hash fest, welcher Prozess zuständig ist, und ändert das danach nicht mehr. Steht dieser Prozess still, warten nur die ihm zugeordneten Spieler.
Warum Gateway oder Login-Server startet mit SO_REUSEPORT mehrere Prozesse → Folge Steht ein Prozess durch GC oder Überlast still, wandern die ihm zugeordneten neuen Verbindungen und UDP-Pakete trotzdem nicht zu anderen Prozessen → Auf dem Bildschirm Nur einige Spieler: kein Login oder Freeze. Bei Neustarts mit geänderter Prozesszahl brechen einige UDP-Sessions ab
Empfangs-Threads dürfen niemals blockieren, Verfahren zur Übergabe von Sessions bei Neustarts implementieren.
Aufgaben Infrastrukturteam
Verbindungswarteschlange pro Prozess überwachen (Recv-Q in ss), bei Deployments mit geänderter Prozesszahl das Verfahren zur Session-Übergabe einhalten.
Im Graphen
Nur einzelne Ausreißer · Verbindungswarteschlange pro Listen-Socket (Recv-Q)
Wo nachsehen
Mit ss -ltnp für jeden Listen-Socket desselben Ports Recv-Q (Verbindungen, die auf accept warten) und den zuständigen Prozess prüfen, Durchsatz der Prozesse vergleichen
Spricht dafür
Von mehreren Sockets desselben Ports staut sich nur bei einem dauerhaft die Recv-Q, und dieser Prozess steht still oder hat einen Durchsatz nahe 0
Spricht dagegen
Recv-Q staut sich bei allen Sockets gleichmäßig: Gesamtüberlast („Überlauf der Verbindungswarteschlange (Backlog)“)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Quellen
socket(7) — Linux manual pageLinux man-pages Mit SO_REUSEPORT binden mehrere Sockets an dieselbe Adresse und teilen sich TCP-Verbindungen und UDP-Pakete
net/core/sock_reuseport.c (Linux v6.12)Linux kernel Ohne BPF-Programm wird der zuständige Socket gewählt, indem der Paket-Hash auf die Zahl der Sockets in der Gruppe aufgeteilt wird
Why does one NGINX worker take all the load?Cloudflare SO_REUSEPORT teilt die Queues per einfachem Hash auf die Worker auf, blockiert ein Worker, hängen alle Verbindungen in seiner Queue
net/ipv4/tcp_diag.c (Linux v6.12)Linux kernel Werte Recv-Q und Send-Q in ss: beim Listen-Socket die Zahl der Verbindungen, die auf accept warten, und das Backlog-Limit, beim verbundenen Socket die von der Anwendung noch nicht gelesenen Bytes und die gesendeten, noch nicht per ACK bestätigten Bytes