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

我的应用程序已经开始接收越来越多的stream量,现在有几天我正在打1000个并发连接。 在那一点,由于某种原因,我的NodeJS服务器停止接受我的连接,他们只是closures。

NodeJS服务器在HAProxy服务器后面,所以我可以在HAProxy的统计页面上看到,当我对1000个并发连接正确的时候,我得到了Resp errors ,确切的错误是:

“传输过程中连接重置”

这使我相信, NodeJS只是拒绝新的连接。 那时我开始研究如何build立节点可以处理的连接,所以我做了以下工作:

添加到我的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 

我启动节点服务器的方式如下所示:

 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个连接?

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

find解决scheme。

我不得不安装npm模块posix

在我的应用程序,我补充说

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

我做了一个简单的负载testing,我连接了15k的tcp连接,在15k之后,它给了我和上面一样的错误。

希望这可以帮助别人有这个问题。