Question

Notre application serveur écoute sur un port et, après un certain temps, n’accepte plus les connexions entrantes. (Et bien que j'aimerais résoudre ce problème, ce n'est pas ce que je demande ici;)

Ce qui est étrange, c'est que lorsque notre application cesse d'accepter les connexions sur le port 44044, il en va de même pour IIS (sur le port 8080). Tuer notre application résout tout - IIS répond à nouveau.

La question est donc de savoir si une application peut gâcher toute la pile TCP / IP? Ou peut-être, comment une application peut-elle faire cela?

Détail insensé: notre application est écrite en C #, sous .Net 2.0, sur XP / SP2.

Clarification: IIS ne "refuse" pas. les tentatives de connexion. Ce n'est jamais les voir. Les clients obtiennent un "serveur qui n’a pas répondu en temps voulu". message (en utilisant le client TCP .Net.)

Était-ce utile?

La solution

Vous risquez peut-être d'affamer la pile. Il est assez facile de drainer dans un environnement à nombre élevé de transactions ouvert / fermé, par exemple. serveur Web servant beaucoup de demandes non groupées.

Ceci est accentué par le délai TIME-WAIT par défaut - la durée pendant laquelle un socket doit être fermé avant d'être recyclé, la valeur par défaut est 90s (si je me souviens bien)

Plusieurs clés de registre peuvent être modifiées - suggérez au moins que les clés suivantes soient créées / modifiées

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

Beaucoup de documents sur MSDN & amp; Technet sur la fonction de ces touches.

Autres conseils

Vous n'avez pas atteint le nombre maximal de poignées de port disponibles?
     netstat -a

J'ai vu quelque chose de similaire lorsqu'une application ouvrait et fermait des ports (mais ne les fermait pas correctement).

Utilisez netstat -a pour voir les connexions actives lorsque cela se produit. Peut-être que votre application serveur ne ferme pas / ne supprime pas les connexions «fermées».

Bonnes suggestions de la part de tous, merci de votre aide.

Alors, voici ce qui se passait: Il s’avère que plusieurs services sont en concurrence pour le même port, et la plupart du temps, le "bon" le service obtiendrait le port. De temps en temps, un deuxième service prendrait le port, et le premier service tenterait d'ouvrir un autre port. À partir de ce moment-là, les services continueraient à s’emparer de nouveaux ports chaque fois qu’ils répondaient à une demande (car ils n’utilisaient pas leurs ports préférés) et nous épuisions tous les ports disponibles.

Bien sûr, la question qui se posait était: "Une application peut-elle gâcher toute la pile TCP / IP?", et la réponse à cette question est: Oui. Une façon de le faire est d’écouter sur de nombreux ports.

Je suppose que le commentaire de RichS sur le numéro de port est correct.

À part cela, la pile TCP / IP n'est qu'un module de votre système d'exploitation et peut donc comporter des bogues pouvant permettre à une application de la tuer. Ce ne serait pas le premier pilote à être tué par un programme.

(Un clin d'œil au chapeau à Andrew Tanenbaum pour avoir insisté sur le fait que les systèmes d'exploitation devraient être modulaires plutôt que monolithiques.)

J'ai moi-même vécu deux situations similaires. Une bonne étape de dépannage consiste à tenter une connexion de la machine affectée à une destination bien connue qui ne rencontre pas actuellement de problèmes de connectivité. Si la tentative de connexion échoue, vous obtiendrez probablement des détails plus intéressants dans le message / code d'erreur. Par exemple, cela pourrait indiquer qu’il n’ya pas assez de descripteurs ni de mémoire.

Du point de vue du support et de l’administrateur système, je ne l’ai vu que très rarement (plus d’une fois), mais cela peut certainement arriver.

Lorsque vous diagnostiquez le problème, éliminez soigneusement les causes possibles au lieu de redémarrer aveuglément le système dès les premiers signes de problèmes. Je ne dis cela que parce que beaucoup de clients avec qui je travaille sont tentés de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top