Node.js Elastic Beanstalk在重负载下拒绝连接(ECONNRESET)

时间:2016-05-21 21:07:20

标签: node.js nginx amazon-ec2 elastic-beanstalk scalability

我将一个简单的Node.js Express应用程序部署到Elastic Beanstalk。

使用loadtest npm包,我用每秒150个请求直接点击EC2实例(绕过ELB),当事情开始变得毛茸茸时。

loadtest -c 10 --rps 150 http://{EC2-IP}/

服务器会立即重置连接(ECONNRESET),使app无法访问。它拒绝支持超过X个并发连接。

2 个答案:

答案 0 :(得分:9)

在深入了解EC2服务器的日志后,我在文件中发现了以下日志消息:

1024 worker_connections are not enough

然后我理解我需要在worker_connections中调整/etc/nginx/nginx.conf声明,以及增加OS文件描述符限制,因为每个连接需要1个文件描述符。

您可以通过运行:

来检查操作系统文件描述符限制
ulimit -n

但是,由于实例是由Elastic Beanstalk管理的,因此亚马逊要求我们对/tmp/deployment/config/#etc#nginx#nginx.conf进行编辑,其中包含与/etc/nginx/nginx.conf相同的内容,但亚马逊知道将其复制到{ {1}}部署完成后,告诉/etc/nginx/nginx.conf使用新配置。

我创建了一个.ebextensions文件,它增加了操作系统文件描述符限制,以及nginx声明。增加此限制将允许我们支持突然的流量高峰,而不是返回worker_connections

在部署时,将其与您的应用程序一起包含在相对于已部署目录的根目录的以下路径中:

ECONNRESET

.ebextensions/nginx.config

答案 1 :(得分:0)

直接修改配置文件的原始副本:因此放入(/etc/nginx/nginx.conf)而不是(/tmp/deployment/config/#etc#nginx#nginx.conf)。