Windows Server 2012 R2は一時ポートを使い果たしますが、そうすべきではありません


13

専用サーバー上のネットワークで奇妙な問題が定期的に発生しています。16 GB RAMおよびIntel 82575EBネットワークアダプターを搭載したXeon E5620上でWindows Server 2012 R2 x64を実行します。

我々はすでに調整されてきたことに注意してくださいHKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersキーの値をTcpTimedWaitDelayしてMaxUserPort、それぞれ30および65530に。

ウェブサイトがローカルデータベースに接続できないという理由で、ウェブサイトがランダムに応答を停止します。この問題が発生し始めるのは、約2週間の稼働時間です。システムログは、TCPIP警告4227および4231の取得を開始します。「グローバルTCPポートスペースから一時ポート番号を割り当てる要求は、そのようなポートがすべて使用されているために失敗しました。」

走ったら

Get-Counter -Counter \TCPv4\*

または

Get-Counter -Counter \TCPv6\*

または

netstat -abn | find /c ":"

私は常に500-1500接続という妥当な値を取得しますが、これは65Kの制限に近いものでもありません。

さらに、「localhost」はローカルで:: 1への解決を停止し、127.0.0.1に戻り
ます。強制的にマシンを再起動するだけで状況を解決できます。

ネットワークアダプタの問題でしょうか?

更新1

再び発生し、メールサーバーを再起動すると解決されたようです。奇妙なことに、すべてのカウンターが、現在アクティブである500個までの1000個の接続と、メールサーバーとは関係のないデータベースに接続しようとすると10055ソケットエラーを示しました。

更新2 これは奇妙ですが、メールサービスを毎日再起動すると問題は完全に修正されます。


1
同様の問題があり、次のリンクで修正されました:http

2
UPDATE 2について。これは、メールサービスが閉じずに多くの接続を生成し、問題を解決せず、悪化するまで非表示にし、1日2回再起動する必要があることを示しています。問題...
ミハイル

回答:


9

WinSvr 2012R2 x64のTCP / IPポートのプールが使い果たされてほぼ1か月間、サーバーが新しい接続とTCP接続の受信を停止した場合、同様の問題が発生しました。だから私はレジストリ値で遊んで、これらは私にとって安定しています:

[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-デフォルトの状態で最大= 16777214にストレッチする必要があります。サーバーが一時ポートを使い果たすことを防ぐ必要があります。
  • TcpMaxDataRetransmissions-実際の接続でのTCP非確認応答データセグメント再送信のタイムアウト制限= 5。

結果はあなたと同じです。アプリケーション/スクリプトのパフォーマンスの動作を監査することを検討すべきだと思います。すべてが問題なく、何も役に立たない場合は、Webアプリケーションサーバーの前にプロキシサーバーを配置し、同じ静的コンテンツを共有し、同じデータベースに同時にアクセスするWebサーバー(IIS、Apacheなど)で2つのノードを作成することができます時間(会社に十分なリソースがある場合)。

たぶん、この記事は何らかの形であなたを助けるでしょう:http : //blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx


1
答える前に質問をよく読んでください。もちろん、尋ねる前にこの解決策を試しましたが、それは非常に一般的です。私はすでに別の手段で問題を解決しました。
カマロSS

1
メールサービスを毎日再起動しても問題は解決しないと思います。別の解決策を見つけましたか?
MyKE

3
@CamaroSS:ソリューションを共有してください(「メールサービスの再起動」を超える場合-これはソリューションではありません)。また、誰かがあなたを助けようとするなら、もう少し感謝すべきです。
スヴェン

@CamaroSSそして、あなたが私の答えを注意深く読んだ場合、「あなたの結果と同じ結果」が表示されるでしょう、そして、私は別の情報を投稿しました
。– MyKE

1
MaxUserPort2012年も設定は機能しますか?2012年には、netshを使用して行う必要があると考えました。例:netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx

4

Tcpipドライバー設定に加えて、一時TCPポート範囲は、netshコマンド(source)を使用してWindows Serverで管理されます。

次のコマンドを使用して、動的ポート範囲を表示できます。

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

ポート範囲を変更するには、次のコマンドを使用します。

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

例えば:

netsh int ipv4 set dynamicport tcp start=49152 num=16384

設定(start = 49152 num = 16384)は、Windows Server 2008以降のデフォルトでもあります


ありがとう 私が見つけたアドバイスはすべて、レジストリ内のMaxUserPortの調整に関するものであり、netshについては誰も言及していませんでした。
ミロス

3

chromewebdriverを使用して大量のSeleniumテストを実行しているWindows Server 2016でも同じ問題が発生していました。このPSスクリプトは、上記で共有された@Mykeの設定を自動的に構成します。shutdown再起動がTCPスタックの変更のために必要とされるため、コマンドが追加されました。

エフェメラルTCPポートのプールサイズを増やす

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

これは、Webdriver.Quit()TCPアドレスが使用中であることを通知する際に受け取っていたエラーメッセージでした。

エラー:EADDRINUSEはClientRequestでEADDRINUSE 127.0.0.1:12843に接続します。(\ node_modules \ selenium-webdriver \ http \ index.js:238:15)
From:Task:WebDriver.quit()


1

データベース接続オブジェクトがリークしていないことを確認しましたか?明示的に(try-finallyを使用して)またはusing {}ブロックを使用して、開かれているすべてのデータベース接続を閉じる必要があります。これは一般的な問題であり、ASPからは直接通知されません。


それはたくさんのPHPサイトで、それらのほとんどは永続的な接続を使用してFastCGIで実行されているので、そうではないはずです。もしそうなら、システムカウンターはより高い値を返します。また、localhostが:: 1への解決を突然停止し、代わりに127.0.0.1に解決する理由も説明できません。
カマロSS

2
:: 1消えることは、おそらく許可されたポートをオーバーフローさせることの単なる副作用です。WindowsはIPv6のpingを試行し、試行するポートを取得できない場合、IPv4にフォールバックすると思われます。PHPは私の専門分野外です。:-(。がんばろう!
ジェームズ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.