Performances et lag

Résolution des erreurs de connexion Netty fermée

Relu le 6 septembre 2026 3 min de lecture

« An existing connection was forcibly closed by the remote host » sonne comme une panne réseau, et ce n'en est généralement pas une — c'est l'apparence d'un fil réseau saturé vu de l'extérieur, une fois que la connexion qu'il était censé servir a déjà abandonné d'attendre.

Ce que fait Netty en coulisses

La couche réseau de Minecraft tourne sur Netty, un cadre d'E/S asynchrone qui confie la lecture et l'écriture des paquets à un petit groupe de fils dédiés, séparé du fil principal de logique de jeu. Cette séparation est délibérée — c'est ce qui permet au serveur de continuer à parler à deux cents clients sans que le tick du monde lui-même n'ait à attendre une seule connexion lente.

Ce groupe reste fini. Si quelque chose génère des paquets plus vite que les fils de Netty ne peuvent les sérialiser et les envoyer — un tableau de scores qui se réécrit à chaque tick pour chaque joueur, une extension d'hologrammes poussant des mises à jour de métadonnées en continu, une rafale de paquets malformés venant d'un client trichant — la file sortante s'accumule. Un client dont la connexion est restée silencieuse assez longtemps suppose que le serveur a disparu et coupe le socket de son côté, ce que le serveur rapporte alors comme une connexion fermée de force, car de son point de vue c'est exactement ce qui s'est passé.

Déclencheurs courants

DéclencheurPourquoi cela sature le fil réseau
Mises à jour de tableau de scores ou de liste de joueurs à chaque tickRéécrit et renvoie des données structurées à chaque client connecté, à chaque tick
Extensions d'hologrammes ou texte flottant avec beaucoup d'instancesChacune suit les joueurs proches et pousse des paquets de métadonnées d'entité en continu
Boucles de restauration de skin/capeRedemande et rediffuse sans cesse les données de profil au lieu de les mettre en cache
Paquets malformés ou excessifs d'un client trichantForce une validation et un traitement supplémentaires par paquet à l'arrivée
C'est un problème de volume de paquets côté extension, pas du pare-feu ni du réseau de périphérie

Comme l'erreur nomme une panne réseau, il est facile de supposer que la périphérie ou le pare-feu sont en cause. Les couches de mitigation et de routage sont entièrement en amont de cela — la saturation se produit à l'intérieur même du processus de jeu, entre ses propres fils Netty et sa propre file de paquets sortants, d'où le correctif toujours situé dans ce que le serveur envoie, pas dans la configuration réseau.

Un rapport /spark profiler pendant les déconnexions nomme la source directement

Les extensions gourmandes en paquets apparaissent clairement dans un profil comme du temps passé dans le code réseau ou d'envoi de paquets. C'est un chemin plus rapide vers la cause que tester les extensions une par une en les désactivant.