我正在自己构建一个应用程序,我希望它能够处理 10K 并发连接(通过本地计算机和 Locust 脚本进行测试)
托管在两台带有 nginx 反向代理和 nodeJS 应用服务器的 ubuntu 14.04 服务器上。
目前,在出现 500 个连接丢失错误的峰值之前,我的并发用户数约为 3.3K。
我通过在两个单独的端口上运行应用程序并使用上游指令在端口上传播请求来实现跨端口连接的负载平衡。
但是,这并没有显示出我的数字有任何明显的改善。
问题:
我知道这里缺少很多信息(我想象每个用户需要多少带宽)。我如何收集正确的信息来做出决定?
我还可以考虑/学习/实现哪些其他选项来在可能的并发用户中产生最大 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/