Apache サーバーの netstat に TIME_WAIT が大量に表示される

Apache サーバーの netstat に TIME_WAIT が大量に表示される

ここにたくさんある理由は何でしょうかTIME_WAIT? ESTABLISHED の SYN 接続がほとんどありません。

[root@www ~]# netstat -natp | grep "210.XX.XX.XX:80" | awk '{print $6}' | sort | uniq -c
      1 ESTABLISHED
     12 FIN_WAIT2
   9903 TIME_WAIT 

答え1

これを説明するには、TCP/IP 通信についてよく理解している必要があります。最も単純な形式では、誰かが Web サーバーに接続すると、サーバーは接続がしばらく続くと想定し、その通信用にポートを割り当て、その通信チャネルのタイムアウトを設定します。netstat出力からわかるように、チャネルまたはポートは、相手側、つまりクライアントが通信を停止すると、TIME_WAIT 状態になります。相手側が必要としたのは、1 ページを見るだけで、それで済んだのかもしれません。しかし、サーバーはそれを知ることはできません。サーバーは、通信に長い時間がかかるという想定で動作しています。

なぜそうするかというと、主に、既存の通信チャネルを維持するよりも、新しい通信チャネルを確立する方が (リソースの面で) コストがかかるからです。特に、クライアントがサーバーに複数のリクエストを送信する場合はそうです。このことについてもっと詳しく知りたい場合は、こちらに非常に良い記事があります。http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html

どうすればそれらを排除できるか、または頻繁に発生するのを防ぐことができるか、またなぜそれらが発生するのかを要約して知りたい場合は、次のページをざっと読んでみてください。http://www.fromdual.com/huge-amount-of-time-wait-connections

関連情報