Можно ли сделать сеанс TCP / IP менее 60 секунд?

8

Наш сервер перегружен сессиями TCP / IP, у нас их 1200 - 1500. Большинство из них висят в состоянии TIME_OUT. Оказывается, что соединение в состоянии TIME_OUT занимает сокет, пока не истечет 60-секундный тайм-аут.

Проблема в том, что сервер перестает отвечать на запросы, а многие клиенты не обслуживаются.

Я сделал простой тест: загрузите файл XML с сервера с помощью Internet Explorer 8.0. Загрузка заканчивается за доли секунды. Но потом я вижу, что соединение TCP / IP висит в состоянии TIME_OUT в течение 60 секунд.

Есть ли способ избавиться от ожидания TIME_OUT или сделать его меньше, чтобы освободить сокет для новых соединений?

Я понимаю, почему соединение TCP / IP переходит в состояние TIME_OUT, но я не понимаю, почему Internet Explorer не закрывает соединение после окончания загрузки файла XML.

Детали.

На нашем сервере работает веб-сервис, написанный на Perl (mod-perl). Сервис предоставляет данные о погоде клиентам. Клиент - это приложение Flash (фактически элемент управления Flash ActiveX, встроенный в приложение Windows).

ОС: Ubuntu

Параметр Apache "Keep Alive" установлен на 0

паритет
источник
Если вы понимаете, почему он входит в состояние TIME_OUT, вы должны понимать, почему это необходимо для предотвращения других атак и проблем. Вы можете уменьшить этот тайм-аут, но для этого есть и другие последствия.
Давр
Синтаксис есть KeepAlive on|off. KeepAlive 0является синтаксисом Apache 1.1; Я полагаю, вы не используете это.
mark4o
1500 сеансов T / O не делают вашу систему не отвечающей. Есть еще одна причина.
Пой
Соединения проходят через дешевый роутер?
LatinSuD

Ответы:

7

Это настройка в вашем стеке TCP. Поскольку мы не знаем, на какой платформе вы находитесь, мы не можем точно сказать, как она называется и как ее изменить.

ОБНОВИТЬ

Итак, вы используете Ubuntu. Вы можете использовать sysctlдля уменьшения net.inet.tcp.mslзначения до половины желаемой TIME_WAITпродолжительности (в миллисекундах - см. man -S 4 tcp), Например sysctl net.inet.tcp.msl=2500. Остерегайтесь последствий этого в отношении блуждающих пакетов, которые могут прибыть после TIME_WAITистечения периода.

vladr
источник
Наш сервер работает под управлением Ubuntu, я обновил детали
пар.
«1200 - 1500 из них» не заработают даже на калькуляторе, поэтому не стоит настраивать msl
poige
1

Я полагаю, вы имеете в виду TIME_WAIT. Одноранговый узел, который инициирует активное закрытие, является тем, который входит TIME_WAIT(см. Диаграмму перехода состояния здесь ), поэтому, если вы можете заставить свой клиент закрыть соединение, то вы переместите TIME_WAITвыключение клиенту. Смотрите этот ответ для более подробной информации и ссылки на хорошую статью о TIME_WAITпроблемах и способах их решения.

Другой вариант, если клиент не может выполнить активное закрытие, это сбросить соединение, установив linger в false перед закрытием. Это вызывает RSTотправку, а не FIN.

Лен Холгейт
источник
Ох, спасибо большое! Но как я могу контролировать соединение TCP / IP, когда пользователь загружает файл XML с помощью Internet Explorer?
пар
TIME_WAITэто нормально, и если производительность вашего сервера не страдает из-за этого, я не слишком беспокоюсь об этом. Когда сокет TIME_WAITподключен, он потребляет некоторые ресурсы, но это не означает, что соединение все еще открыто или сервер его обрабатывает.
Лен Холгейт
0

Сервер, который не отвечает, скорее всего, не имеет никакого отношения к количеству соединений в состоянии TIME_WAIT. Непонятно, что вы подразумеваете под "занимает сокет" - сервер должен был уже давно иметь closeсокет в этой точке. Система должна обрабатывать десятки тысяч соединений в состоянии TIME_WAIT.

Дэвид Шварц
источник