Skip to content

Висящие соединения в Node.js и анонс Cassiterite

10/02/2010

Наконец разобрался с висящими соединениями. Проблема в том что node.js и/или Sphinx оставляют целую кучу полузакрытых соединений (в состоянии TIME_WAIT). Соединения эти почему то висят очень долго — если открыть статистику соединений netstat -a -n и пару раз обновить страницу сайта, можно увидеть как каждое обновление добавляет пачку из 3-4 соединений. По идее через 2 мс такие соединения должны сбрасываться сами, но этого почему то не происходит.

Чтобы исправить это недоразумение, надо сделать следующее. Открываем консоль и пишем туда:

sysctl net.ipv4.tcp_tw_recycle = 1
sysctl net.ipv4.tcp_tw_reuse = 1

Первая команда включает быстрый сброс полузакрытых соединений, вторая разрешает повторно использовать такие соединения в некоторых случаях. Прежде чем включать это на production-серверах, обязательно почитайте соответствующий RFC (ссылка ниже).

Имейте в виду, это изменит настройки TCP только для текущего сеанса. Если Вы не хотите устанавливать эти настройки каждый раз при загрузке, добавьте их в /etc/sysctl.conf.

Кстати, по просьбе одного товарища я выложил на Гитхаб свой прототип блога на Node.js. Проект получает имя Cassiterite и почётное место среди других моих недоделок 🙂

Ссылки по теме:

RFC 1337: TIME-WAIT Assassination Hazards in TCP
Cassiterite на Github

Добавить комментарий

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: