使用 nginx 的 10K 并发连接
10K concurrent connections with nginx
我正在自己构建一个应用程序,我希望它能够处理 10K 个并发连接(通过本地机器和 locust 脚本测试)
托管在两台 ubuntu 14.04 服务器上,带有 nginx 反向代理和 nodeJS 应用服务器。
目前我达到了大约 3.3K 的并发用户,然后才遇到 500 个连接丢失错误的峰值。
我通过 运行 应用程序在两个单独的端口上实现跨端口连接的负载平衡,并使用上游指令在端口上传播请求。
但是,这并没有显示我的数字有任何明显的改善。
问题:
我知道这里遗漏了很多信息(我想象每个用户需要多少带宽)。我该如何收集正确的信息来做出决定?
还有什么其他选择可以consider/learn/implement 来最大程度地增加可能的并发用户数?
非常感谢!
如果您在 nginx 日志中看到很多 "Too many open files" 错误,那是因为您已达到服务器上当前设置的并发打开套接字的限制。
您可能必须增加 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
我正在自己构建一个应用程序,我希望它能够处理 10K 个并发连接(通过本地机器和 locust 脚本测试)
托管在两台 ubuntu 14.04 服务器上,带有 nginx 反向代理和 nodeJS 应用服务器。
目前我达到了大约 3.3K 的并发用户,然后才遇到 500 个连接丢失错误的峰值。
我通过 运行 应用程序在两个单独的端口上实现跨端口连接的负载平衡,并使用上游指令在端口上传播请求。
但是,这并没有显示我的数字有任何明显的改善。
问题:
我知道这里遗漏了很多信息(我想象每个用户需要多少带宽)。我该如何收集正确的信息来做出决定?
还有什么其他选择可以consider/learn/implement 来最大程度地增加可能的并发用户数?
非常感谢!
如果您在 nginx 日志中看到很多 "Too many open files" 错误,那是因为您已达到服务器上当前设置的并发打开套接字的限制。
您可能必须增加 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