与nginx的10K并发连接

时间:2016-07-11 15:26:47

标签: node.js nginx concurrency ubuntu-14.04

我正在自己构建一个应用程序,我希望它可以处理10K并发连接(通过本地机器和蝗虫脚本测试)

使用nginx反向代理和nodeJS应用服务器托管在两台ubuntu 14.04服务器上。

目前我遇到了大约3.3K并发用户,然后遭遇了500次连接丢失错误。

通过在两个单独的端口上运行应用程序并使用上游指令在端口上传播请求,我实现了跨端口连接的负载平衡。

然而,这并没有显示我的数字有任何改善。

问题:

  1. 我知道这里缺少很多信息(我想象每个用户需要多少带宽)。我如何收集正确的信息来决定这个?

  2. 我可以考虑/学习/实施哪些其他选项以在可能的并发用户中获得最大收益?

  3. 非常感谢!

1 个答案:

答案 0 :(得分:1)

如果你看到很多"太多的打开文件"您的nginx日志中的错误,是因为您已达到当前在服务器上设置的并发打开套接字的限制。

您可能必须为nginx用户以及可能还有节点应用用户增加使用限制(ULimit)。这是我每次加载测试nginx + nodejs时遇到的第一个问题。 (https://www.cyberciti.biz/faq/linux-unix-nginx-too-many-open-files/

ULIMIT

ulimit命令为您提供当前用户的限制,因此您必须在nginx用户上连接时运行它

# su in the user nginx
su - nginx
ulimit -Hn
ulimit -Sn

# or
su nginx --shell /bin/bash --command "ulimit -Hn"
su nginx --shell /bin/bash --command "ulimit -Sn"

我们通常在/etc/security/limits.conf中更改它

sudo vi /etc/security/limits.conf

# Add the following lines
nginx       soft    nofile   30000
nginx       hard    nofile  30000
# Save

# Reload (I think rebooting here is the best way)
sysctl -p

nginx.conf

之后,你必须在nginx配置文件中设置nginx软件级别的限制

sudo vi /etc/nginx/nginx.conf

# Add this line at the root of the config
worker_rlimit_nofile 30000;

# Reload (This will fail if you have SELinux enabled)
sudo nginx -s reload

的SELinux

要允许nginx应用设置自己的限制,您可以设置selinux bool:

setsebool httpd_setrlimit on
sudo nginx -s reload