Nous rencontrons régulièrement d'étranges problèmes de mise en réseau sur notre serveur dédié. Il exécute Windows Server 2012 R2 x64 sur Xeon E5620 avec 16 Go de RAM et une carte réseau Intel 82575EB.
S'il vous plaît noter que nous avons déjà à l' écoute des HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
valeurs clés TcpTimedWaitDelay
et MaxUserPort
à 30 et 65530 respectivement.
À un moment aléatoire, nos sites Web cessent de répondre, car ils ne peuvent pas se connecter à une base de données locale. C'est environ 2 semaines de disponibilité lorsque ces problèmes commencent à se produire. Le journal système commence à recevoir les avertissements TCPIP 4227 et 4231. Il indique "Une demande d'allocation d'un numéro de port éphémère à partir de l'espace de port TCP global a échoué en raison de l'utilisation de tous ces ports.".
Si je cours
Get-Counter -Counter \TCPv4\*
ou
Get-Counter -Counter \TCPv6\*
ou
netstat -abn | find /c ":"
J'obtiens toujours une valeur raisonnable de 500 à 1500 connexions, ce qui n'est même pas proche de la limite de 65K.
En outre, «localhost» cesse de résoudre localement à :: 1, revenant à 127.0.0.1
Seul un redémarrage forcé de la machine peut résoudre la situation.
Serait-ce un problème de carte réseau?
MISE À JOUR 1
Cela s'est produit à nouveau et semble avoir été résolu lorsque j'ai redémarré le serveur de messagerie. Bizarre cependant, tous les compteurs ont montré ~ 1000 connexions avec ~ 500 étant actives en ce moment, et toujours l'erreur de socket 10055 lors de la tentative de connexion à la base de données qui n'a rien à voir avec le serveur de messagerie.
MISE À JOUR 2 C'est étrange, mais le redémarrage quotidien des services de messagerie résout complètement le problème.
la source
Réponses:
J'ai eu un problème similaire avec un pool épuisé de ports TCP / IP sur WinSvr 2012R2 x64 pendant près d'un mois où le serveur a cessé de recevoir des connexions nouvelles et TCP. J'ai donc joué avec les valeurs de registre et celles-ci sont stables pour moi:
Résultat identique au vôtre. Je pense que vous devriez envisager de vérifier votre comportement des performances de vos applications / scripts. Si tout va bien et que rien ne vous aide, vous pouvez essayer de mettre le serveur proxy avant votre serveur d'applications Web, créer 2 nœuds avec le serveur Web (IIS, Apache, ...) qui partageront le même contenu statique et accéderont à la même base de données en même temps. temps (si vous avez suffisamment de ressources dans votre entreprise).
Peut-être que cet article vous aiderait d'une manière ou d'une autre: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx
la source
MaxUserPort
fonctionne- t-il toujours en 2012? Je pensais qu'en 2012, vous devez le faire via netsh. par exemple:netsh int ipv4 set dynamicport tcp start=25535 num=40000
Outre les paramètres du pilote Tcpip, la plage de ports TCP éphémère est gérée dans Windows Server à l'aide de la commande netsh ( source ).
Vous pouvez afficher la plage de ports dynamiques avec les commandes suivantes:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
Pour modifier la plage de ports, utilisez cette commande:
netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
Par exemple:
netsh int ipv4 set dynamicport tcp start=49152 num=16384
Le paramètre (start = 49152 num = 16384 ) est également la valeur par défaut sur Windows Server 2008.
la source
A eu ce même problème sur Windows Server 2016 en exécutant de grandes quantités de tests Selenium à l'aide de chromewebdriver. Ce script PS configurera automatiquement les paramètres @Myke partagés ci-dessus. La
shutdown
commande a été ajoutée car un redémarrage est requis pour les modifications de la pile TCP.Augmenter la taille du pool pour les ports TCP éphémères
C'était le message d'erreur que nous recevions
Webdriver.Quit()
en nous disant qu'une adresse TCP était en cours d'utilisation.la source
Vous êtes-vous assuré de ne pas divulguer d'objets de connexion à la base de données? Vous devez fermer chaque connexion de base de données ouverte, soit explicitement (avec try-finally) soit avec un bloc using {}. Il s'agit d'un problème courant dont ASP ne vous parlera pas directement.
la source