
В чем причина многих TIME_WAIT
здесь? Даже у нас очень мало УСТАНОВЛЕННЫХ, 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-коммуникации. В простейшей форме, когда кто-то подключается к вашему веб-серверу, ваш сервер предполагает, что соединение будет длиться некоторое время, и выделяет порт для этого соединения и устанавливает тайм-аут для этого канала связи. Канал или порт, как вы видите из netstat
вывода, переходит в состояние TIME_WAIT, если человек на другом конце, т. е. клиент, прекращает связь. Возможно, все, что ему или ей было нужно, это просмотреть одну страницу, и это было сделано. Но ваш сервер не может этого знать. Он работает, предполагая, что это будет долгое время, затрачиваемое на связь.
Почему это происходит, в основном потому, что создание нового канала связи обходится дороже (с точки зрения ресурсов), чем сохранение существующего, особенно если клиент собирается делать несколько запросов с вашего сервера. Если вы хотите покопаться и узнать об этом поглубже, есть довольно хорошая статья об этом здесь:http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html
Если вас интересует только то, как от них избавиться или предотвратить их столь частое возникновение, а также вкратце, почему они случаются, вот еще одна страница, которую вам, возможно, будет интересно просмотреть:http://www.fromdual.com/огромное-количество-времени-ожидания-подключений