Question Windows Server 2012 R2 manque de ports éphémères, bien que cela ne devrait pas


Nous rencontrons régulièrement des problèmes étranges avec la 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à accordé HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters valeurs clés TcpTimedWaitDelay et MaxUserPort à 30 et 65530 respectivement.

À un moment donné, nos sites Web cessent de répondre, pour la raison qu'ils ne peuvent pas se connecter à une base de données locale. Il y a environ 2 semaines de disponibilité lorsque ces problèmes commencent à se poser. Le journal système commence à recevoir les avertissements TCPIP 4227 et 4231. Il indique "Une demande d'attribution d'un numéro de port éphémère à partir de l'espace du port TCP global a échoué car tous ces ports sont utilisés.".

Si je cours

Get-Counter -Counter \TCPv4\*

ou

Get-Counter -Counter \TCPv6\*

ou

netstat -abn | find /c ":"

Je reçois toujours une valeur raisonnable de 500-1500 connexions, ce qui n’est même pas proche de la limite de 65K.

En outre, "localhost" arrête de résoudre localement :: 1 et revient à 127.0.0.1
Seul un redémarrage forcé de la machine peut résoudre le problème.

Pourrait-il s'agir d'un problème d'adaptateur réseau?

MISE À JOUR 1

C'est arrivé à nouveau et semblait avoir été résolu lorsque j'ai redémarré le serveur de messagerie. Bizarre cependant, tous les compteurs indiquaient environ 1 000 connexions, dont environ 500 étaient actives pour le 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.


9
2017-12-02 06:38


origine


J'ai eu un problème similaire et le lien suivant l'a corrigé pour moi: http://blogs.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port-exhaustion-issues.aspx
À propos de UPDATE 2. Cela indique donc simplement que les services de messagerie génèrent trop de connexions sans les fermer et que vous ne résolvez pas le problème, mais que vous le cachez jusqu’à ce que la situation empire et que 2 redémarrages par jour soient nécessaires un certain temps ... On dirait que se cacher plutôt que de résoudre problème... - Mikhail


Réponses:


J'ai eu un problème similaire avec le pool épuisé de ports TCP / IP sur WinSvr 2012R2 x64 pendant presque 1 mois où le serveur a cessé de recevoir toutes les nouvelles connexions et connexions TCP. J'ai donc joué avec les valeurs du registre et celles-ci sont stables pour moi:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay - 30
  • MaxUserPort - 65534
  • TcpNumConnections - devrait être dans l'état par défaut étendu au maximum = 16777214 devrait empêcher le serveur d'épuiser les ports éphémères.
  • TcpMaxDataRetransmissions - limite de temporisation pour la retransmission de segments de données TCP non acquittés à la connexion réelle = 5.

En résultat identique à la vôtre. Je pense que vous devriez envisager de vérifier votre comportement des performances de vos applications / scripts. Si tout est correct et que rien n’aide, vous pouvez essayer de placer 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 de la même manière. temps (si vous avez assez de ressources dans votre entreprise).

Peut-être que cet article pourrait vous aider d'une certaine manière: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-dos-when-it-s-important.aspx


6
2018-01-12 12:03



Vous devriez avoir lu attentivement la question avant de répondre. Bien sûr, j'ai essayé cette solution avant de demander, c'est très courant. J'ai déjà résolu le problème par un autre moyen. - CamaroSS
Je pense que le redémarrage quotidien des services de messagerie n'est pas un problème résolu. Avez-vous trouvé une autre solution? - MyKE
@CamaroSS: Merci de partager votre solution (si elle dépasse le "redémarrage du service de messagerie" ne pas une solution). En outre, vous devriez peut-être l'apprécier un peu plus si quelqu'un essaie de vous aider. - Sven♦
@CamaroSS Et si vous lisez attentivement ma réponse, vous verrez "Même résultat que le vôtre", alors j'ai posté une autre information .. - MyKE
Est-ce que la mise MaxUserPort toujours travailler en 2012? Je pensais qu'en 2012, vous deviez le faire via netsh. par exemple.: netsh int ipv4 set dynamicport tcp start=25535 num=40000 - rustyx


Avait ce même problème sur Windows Server 2016 exécuter de grandes quantités de tests de sélénium en utilisant chromewebdriver. Ce script PS configurera automatiquement les paramètres @Myke partagés ci-dessus. le shutdown Cette 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

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

shutdown -r -t 0

C’était le message d’erreur que nous recevions le Webdriver.Quit() nous dire qu'une adresse TCP était en cours d'utilisation.

Erreur: EADDRINUSE connect EADDRINUSE 127.0.0.1:12843       à ClientRequest. (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
De: Tâche: WebDriver.quit ()


2
2017-07-01 23:08





Vous êtes-vous assuré de ne pas laisser fuir les objets de connexion à la base de données? Vous devez fermer chaque connexion de base de données ouverte, de manière explicite (avec try-finally) ou avec un bloc using {}. Il s'agit d'un problème courant dont ASP ne vous parlera pas directement.


1
2017-12-13 05:22



C'est un tas de sites PHP, la plupart fonctionnent sous FastCGI en utilisant une connexion persistante, donc ce ne devrait pas être le cas. Si c'était le cas, les compteurs du système renverraient des valeurs beaucoup plus élevées. Je ne peux pas non plus expliquer pourquoi localhost cesse soudainement de se résoudre en: 1 et se règle en 127.0.0.1. - CamaroSS
:: 1 disparaître n'est probablement qu'un effet secondaire du débordement des ports autorisés - je suppose que Windows tente un ping IPv6 et lorsqu'il ne peut pas obtenir de port pour tenter cette tentative, il retombe sur IPv4. PHP est en dehors de mes domaines d'expertise. :-(. Bonne chance! - James


Outre les paramètres du pilote Tcpip, la plage de ports TCP éphémères est gérée dans Windows Server à l'aide de la Netsh commande (la source).

Vous pouvez vue 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

À changement 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 réglage (début =49152 num =16384) est aussi le défaut à partir de Windows Server 2008.


1
2017-07-24 07:46



Merci beaucoup pour cela - j'ai déjà passé des heures à essayer de résoudre mon problème. Tout le conseil que j'ai pu trouver concernait l'ajustement de MaxUserPort dans le registre et personne n'a mentionné netsh. - milosz