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

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

1 ответ

Решение

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

Существует исправление, объединенное с апреля 2013 года, но оно все еще не объединено со стабильным 0.10 ветка.

Решения:

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