J'ai rencontré un problème de stabilité vraiment bizarre en production lors de l'exécution d'une application Grails trivial utilisant des composants standard.Grailles + problème Tomcat + Ubuntu: connexions CLOSE_WAIT
Après un certain temps de fonctionnement normal, le nombre de Tomcat (jsvc
) connexions TCP à l'état CLOSE_WAIT
augmente jusqu'à ce que Tomcat atteint son plafond de fil (Maximum number of threads (N) created for connector
), après quoi Tomcat enraye.
Normalement, cela indiquerait que l'application contient du code qui ne ferme pas correctement ses connexions TCP. Cependant, mon code Grails dans cette application est vraiment très trivial et n'initie aucune connexion TCP seule, donc je ne peux pas penser à un scénario où mon code pourrait causer le problème CLOSE_WAIT
.
En outre, tous les composants de la pile sont des éléments standard que je suppose être sans bug; Je cours Grails 1.2.1 sous le Tomcat 6 standard qui est livré dans Ubuntu 9.1 (apt-get install tomcat6
).
- Est-ce un problème connu?
- Comment allez-vous résoudre le problème?
Pouvez-vous vérifier que la connexion http est obsolète, pas par ex. connexions de base de données que votre application fait? Est-ce un site public - vous laissant "vunerable" à syn inondation, ou un crawler Web trop désireux? Le site est-il uniquement accessible par le navigateur ou d'autres clients potentiellement défaillants qui ne parviennent pas à fermer leurs connexions? – nos
Yepps. Ce sont les connexions HTTP qui sont bloquées dans CLOSE_WAIT. Le site est accessible à tous les types de navigateurs, y compris les robots, ce qui fait que des clients bogués peuvent y accéder. Mais je suppose que la pile devrait être robuste pour ces clients buggés :-) – knorv
Le connecteur NIO est généralement plus résilient par rapport à celui par défaut – nos