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之后,它给了我和上面一样的错误。
希望这可以帮助别人有这个问题。