我的应用程序已经开始接收越来越多的流量,现在有几天我正在进行大约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个连接处最大化?
这里有什么想法吗?我想出了什么尝试。
答案 0 :(得分:0)
找到了解决方案。
我必须安装npm模块posix
在我的应用中,我添加了
var posix = require('posix');
posix.setrlimit('nofile', { soft: 15000 });
我做了一个简单的负载测试,我连接了15k tcp连接,15k之后它给了我同样的错误。
希望这可以帮助其他人解决这个问题。