ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: keepalive off



On Mon, 21 Feb 2005, Dmitry Kondratyev wrote:

Igor Sysoev wrote:

TIME_WAIT с keepalive никак не связан - это состояние сокета в ядре
после активного закрытия. Сокет находится в этом состоянии 2*MSL секунд.
MSL равен 30 секундам. Во FreeBSD его при необходимости можно уменьшить
с помощью sysctl net.inet.tcp.msl.

Кстати, есть мнение. что с уменьшением net.inet.tcp.msl надо быть поосторожней, по крайне мере на фре. Хотя стопроцентной уверенности нет, но раньше, когда статику у меня отдавал thttpd, при уменьшенном msl часто поступали жалобы от тех, у кого стоят слишком умные детекторы атак. Якобы с того ип, где тини висит, их атаковали. После возвращения msl в 30 секунд, всё стало нормально. Жалоб не было по крайней мере. :-) Это где-то в районе 4.6-4.9 или -4.10 проявлялось, я уж точно не помню. А до 4.6 я msl не уменьшал.

Знакомая проблема :)

Насчёт уменьшения MSL - согласен. Есть ещё мнение, что во фре есть проблемы
с залипающими TIME_WAIT. Но тут я не уверен, что это действительно имеет
происходит. В качестве решения предлагается делать пассивное закрытие
соединения, то есть, дожидаться, когда его закроет другая сторона.
Поэтому у nginx в директиве keepalive_timeout два аргумента - первый
задаёт таймаут, после которого nginx сам закроет соединение (активно),
а второй - время для заголовка "Keep-Alive: timeout=<время>". Этот
заголовок понимают Mozilla и Konqueror и сами закрывают соедиение
по этому таймауту. MSIE сам закрывает соединение через примерно через
минуту. Таким образом, директива

   keepalive_timeout   75 20;

указывает держать открытым соединение до 75 секунд. MSIE успеет сам
закрыть соединение за это время (60 секунд). Mozilla и Konqueror закроют
ещё раньше (20 секунд). Оставшиеся соединения закроет nginx. Кроме того,
можно избежать состояния TIME_WAIT для соединений, закрытых по таймауту:

   reset_timedout_connection  on;

Разумеется, на keepalive соединение в отличие от сокета в TIME_WAIT
расходуется один файловый дескриптор. Кроме того, сокет в состоянии
TIME_WAIT может занимать меньше памяти в ядре, чем в других состояниях
(для FreeBSD 4.x это не так).


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.