専用サーバーのネットワークで奇妙な問題が定期的に発生しています。 Xeon E5620でWindows Server 2012 R2 x64を実行し、16 GB RAMおよびIntel 82575EBネットワークアダプターを搭載しています。
すでに調整済みであることに注意してくださいHKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
キー値TcpTimedWaitDelay
およびMaxUserPort
をそれぞれ30および65530に。
ランダムな時点で、ローカルデータベースに接続できないという理由で、Webサイトが応答を停止します。この問題が発生し始めるのは、約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ソケットエラーを示します。
PDATE 2これはIS奇妙ですが、メールサービスを毎日再起動すると問題が完全に修正されます。
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
結果はあなたと同じです。アプリケーション/スクリプトのパフォーマンスの動作を監査することを検討する必要があると思います。すべてが問題なく、何も解決しない場合は、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
Tcpipドライバーの設定に加えて、エフェメラルTCPポート範囲はnetshコマンドを使用して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 =49152num =16384)もdefaultWindows Server 2008以降。
Windows Server 2016でこれと同じ問題があり、chromewebdriverを使用して大量のSeleniumテストを実行していました。このPSスクリプトは、上記で共有された@Mykeの設定を自動的に構成します。 TCPスタックの変更には再起動が必要であるため、shutdown
コマンドが追加されました。
_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アドレスが使用中であったことを通知しています。
エラー:ClientRequestでEADDRINUSE接続EADDRINUSE 127.0.0.1:12843。 (\ node_modules\Selenium-webdriver\http\index.js:238:15)
From:タスク:WebDriver.quit()
データベース接続オブジェクトをリークしていないことを確認しましたか?明示的に(try-finallyを使用して)、またはusing {}ブロックを使用して、開かれているすべてのデータベース接続を閉じる必要があります。これは、ASPが直接通知しない一般的な問題です。