node.js - 与 nginx 的 10K 并发连接

标签 node.js nginx concurrency ubuntu-14.04

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

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

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

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

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

问题:

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

  2. 我还可以考虑/学习/实现哪些其他选项来在可能的并发用户中产生最大 yield ?

非常感谢!

最佳答案

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

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

U限制

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

关于node.js - 与 nginx 的 10K 并发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310740/

相关文章:

node.js - Firmata、Arduino和Node js之间的关系

javascript - 使用函数作为原型(prototype)

java - 从 SwingWorker 接收数据

java - 对于 Java 中的生产者-消费者来说,什么是更好的习惯用法?

php - Nginx 错误 413

java - 如何启动、暂停和停止生产者/消费者关系?

node.js - Node Js - 如果连接中断,Mongoose find 不会抛出错误

javascript - 使用 NodeJS 增加/减少 firebase 实时数据库中的值

caching - Nginx:限速和缓存按什么顺序执行?

nginx - 使用 nginx 将 url 重写为子域,使其可以通过两者访问