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