すべてのプロダクト
Search
ドキュメントセンター

:SLBバックエンドサーバーのTIME_WAITステータスに多数の接続が含まれている

最終更新日:Mar 06, 2025

質問

SLBは複数のバックエンドサーバーに負荷を分散します。 クライアントページビューが0の場合、TIME_WAITステータスに大きな接続があることがわかります。 バックエンドサーバーにログインし、次のコマンドを実行して、TIME_WAITステータスで接続数が多すぎることを確認します。

while true;do netstat -n | awk '/^ tcp/ {++ S[$NF]} END {for(a in S) print a,S[a]}';sleep 1;done | grep TIME_WAIT

次のコマンド出力が返されます。

TIME_WAIT 424
TIME_WAIT 430
TIME_WAIT 437
TIME_WAIT 447
TIME_WAIT 455
TIME_WAIT 464
TIME_WAIT 473
TIME_WAIT 481
TIME_WAIT 490
TIME_WAIT 498
TIME_WAIT 506
TIME_WAIT 513 

回答

この場合、問題を解決するには2つの方法があります。

説明

: この問題は通常、SLBのレイヤー7 (HTTP) 転送モードで発生します。 SLBがHTTPリクエストを転送する場合、リクエストはアプリケーション層プロトコルで行われます。 したがって、Webアプリケーションのタイムアウト時間を変更しても、システムの頻度やnet.ipv4.tcp_keepalive_timeなどのSLBヘルスチェックパラメーターがあっても、TIME_WAITステータスの接続数の減少に大きな影響はありません。

    • SLBレイヤー4 (TCP) 転送モードの使用を推奨します。 詳細については、「TCPリスナーの追加」をご参照ください。 各ヘルスチェックのこのパターンでは、SLBはデータパケットのRST状態を送信して、サーバーヘルスチェックで確立されたTCP接続から切断するため、SLBヘルスチェック接続からは表示されません。
    • TCP転送モードの変更に加えて、HTTP転送モードでヘルスチェック機能を無効にして、TIME_WAITステータスの接続数を減らすこともできます。 ただし、ヘルスチェックを無効にすると、バックエンドサーバーの例外を監視できなくなります。 SLBが異常状態のバックエンドサーバーにリクエストを転送した場合、異常状態のバックエンドサーバーは監視できません。 ヘルスチェックを無効にする方法の詳細については、「ヘルスチェックの無効化」をご参照ください。

適用範囲

  • SLB