在运行 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 年 4 月起合并,但仍未合并到稳定0.10
分支。
解决方案:
- 避免
https
使用,使用一些代理服务器(nginx); - 自定义超时处理;
- 使用高于 的节点版本
0.10
。