Назад | Перейти на главную страницу

Nodejs: сервер не закрывает TCP-соединения

Столкновение с проблемой на производственном сервере под управлением debian (7.0) с кластером nodejs (v0.10.x), где он не закрывается некоторые TCP-соединения с клиентами.

Это приводит к разрыву соединения при достижении лимита соединения.

С помощью ss -s инструмент Я могу отслеживать, что некоторые соединения закрываются через некоторое время, а некоторые нет.

Здесь sysctrl Изменения конфигурации, которые я использую, чтобы увеличить максимальное количество подключений в качестве временного решения:

net.ipv4.ip_local_port_range = 1024 65500
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 16384 33554432
net.ipv4.tcp_wmem = 4096 16384 33554432
net.ipv4.tcp_mem = 786432 1048576 26777216
net.core.netdev_max_backlog = 2000

Как найти узкое место и решить проблему?

Проблема заключалась в том, что https сервер не наследует логику тайм-аута сокетов от http сервер.

Eсть патч объединен с апреля 2013 г., но до сих пор не объединен в стабильный 0.10 филиал.

Решения:

  • избегать https использование, используйте какой-нибудь прокси-сервер (nginx);
  • настраиваемый дескриптор тайм-аута;
  • используйте версию узла выше, чем 0.10.