在1000个并发连接之后,NodeJS停止接受新连接

时间:2014-03-01 13:01:12

标签: node.js

我的应用程序已经开始接收越来越多的流量,现在有几天我正在进行大约1000个并发连接。在那时由于某种原因,我的NodeJS服务器停止接受我的连接,它们只是关闭。

NodeJS服务器位于HAProxy服务器后面,因此我可以在HAProxy的统计信息页面上看到,当我正好接近1000个并发连接时,我得到Resp errors确切的错误是:

  

“传输期间连接重置”

这让我相信NodeJS只是拒绝新的联系。那时我开始研究如何建立节点可以处理的连接,所以我做了以下几点:

将此添加到我的sysctl.cfg

fs.file-max = 2097152
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_nonlocal_bind = 1

我启动Node服务器的方式如下:

Login to the EC2 from my terminal on Mac OSX, and write:
sudo su
cd node/
ulimit -n 10000
forever start server.js

哦,请注意,在HAProxy服务器上,我在sysctl.cfg获得了相同的内容,并且还将maxconn提升为128000

我很确定这里的问题是节点服务器,但是无法理解为什么节点似乎仍然在1000个连接处最大化?

这里有什么想法吗?我想出了什么尝试。

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

我必须安装npm模块posix

在我的应用中,我添加了

var posix = require('posix');

posix.setrlimit('nofile', { soft: 15000 });

我做了一个简单的负载测试,我连接了15k tcp连接,15k之后它给了我同样的错误。

希望这可以帮助其他人解决这个问题。