Вы используете веб-сервер, к которому обращаются браузеры с нескольких мобильных устройств.
Из-за того, как работает TCP/IP, соединения не могут быть закрыты немедленно. Пакеты могут поступить не по порядку или быть повторно переданными после закрытия соединения. CLOSE_WAIT указывает, что удаленная конечная точка (другая сторона соединения) закрыла соединение. TIME_WAIT указывает, что локальная конечная точка (эта сторона) закрыла соединение. Соединение поддерживается так, что любые задержанные пакеты могут быть сопоставлены с соединением и обработаны соответствующим образом. Соединения будут удалены по истечении времени ожидания по умолчанию в течение четырех минут.
Тем не менее число рядом с вашей статистикой TIME_WAIT, 646750, является чрезмерным.
Это означает, что за последние 4 минуты было закрыто 646750 соединений, что составляет 2694 в секунду!
Очевидно, что некоторые из этих мобильных устройств сильно неисправны и бомбардируют ваш сервер соединениями, которые не закрываются должным образом со стороны клиента, или что вы обслуживаете огромное количество клиентов (что не имеет смысла для одного сервера).
Если вы не можете определить, какие мобильные устройства или приложения являются причиной проблемы, и устранить их, вы не контролируете клиентскую сторону и можете только устранить проблему на стороне сервера.
Одним из параметров, который может улучшить эту перегрузку, является TcpTimedWaitDelay, описываемый как:
Определяет время, которое должно пройти, прежде чем TCP сможет освободить закрытое соединение и повторно использовать свои ресурсы. Этот интервал между закрытием и освобождением известен как состояние TIME_WAIT или состояние 2MSL. В течение этого времени соединение может быть восстановлено с гораздо меньшими затратами для клиента и сервера, чем установление нового соединения.
Уменьшение значения этой записи позволяет TCP быстрее освобождать закрытые соединения, предоставляя больше ресурсов для новых соединений.
Однако, если значение слишком мало, TCP может освободить ресурсы подключения до завершения подключения, что потребует от сервера использования дополнительных ресурсов для восстановления подключения.
TcpTimedWaitDelay можно изменить с помощью regedit по адресу HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
.
Он содержит количество секунд ожидания. Значение по умолчанию составляет 240 секунд (4 минуты).
Перезагрузка требуется при изменении.
Например, изменение на 30 секунд с 2694 соединениями в секунду будет означать, что только 80820 соединений будут ожидать закрытия.
Это число все еще огромно, но изменение все равно уменьшит использование ресурсов соединения.