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
,