【问题标题】:10K concurrent connections with nginx与 nginx 的 10K 并发连接
【发布时间】:2016-11-13 14:59:42
【问题描述】:

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

托管在两个带有 nginx 反向代理和 nodeJS 应用服务器的 ubuntu 14.04 服务器上。

目前,在遇到 500 个连接丢失错误的高峰之前,我的并发用户数约为 3.3K。

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

但是,这并没有显示出我的数字有任何明显的改善。

问题:

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

  2. 我可以考虑/学习/实施哪些其他选项来最大程度地增加可能的并发用户?

非常感谢!

【问题讨论】:

  • 你确定掉线问题是来自nginx还是node?您可能希望从根本上排除节点应用程序正在执行的任何复杂操作,以查看问题是否消失,这表明问题源于您的某些业务逻辑。您可能还想跟踪内存、磁盘、cpu 使用方面的性能。
  • 如何找出连接断开的来源?
  • 您需要像排除任何棘手的错误一样尝试排除问题。试着把事情排除在等式之外,首先是大事情。如果您可以从等式中删除节点(例如,尝试同时从 nginx 提供 10K 静态文件,因此甚至不使用节点)。如果可行,那么问题可能出在节点而不是 nginx 上。如果它仍然断开连接,则可能是 nginx 或硬件问题,您可以从那里继续。

标签: node.js nginx concurrency ubuntu-14.04


【解决方案1】:

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

您可能需要增加 nginx 用户的使用限制 (ULimit),也可能需要增加节点应用程序用户的使用限制。这是我每次对 nginx+nodejs 进行负载测试时遇到的第一个问题。 (https://www.cyberciti.biz/faq/linux-unix-nginx-too-many-open-files/)

超限

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2016-10-25
    • 1970-01-01
    • 2018-07-30
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多