Nginx 瓶颈在每秒 55k 请求,但服务器仍然有很多可以提供

Nginx bottleneck at 55k Requests per Second but server still has plenty to give

所以基本上我已经设置了 Nginx OpenResty 并尝试优化配置以获得最大性能/请求。

服务器显然可以在不眨眼的情况下处理很多事情,但似乎在每秒大约 55k 请求后,Nginx 将不会再建立任何连接,如统计数据所示。

我正在使用 Luameter 获取我的读数,并通过使用云平台对我的服务器施加压力,每秒执行 50k 个请求或每秒 100k 个请求,永远不会 returns 超过来自 Nginx 统计的 50k 个请求。

服务器有一个完整的 1gbps 端口,但在承受压力时从不发送超过 330mbps 的输出。它还有一个 SSD HDD。

Cpu 在每秒 10 万个请求时达到 45%。

ulimit 无限制 ulimit -n 999999

这是我的 nginx 配置的一个片段:

user  nobody; worker_processes  8; worker_rlimit_nofile 262144; error_log            logs/error.log crit;

events {
worker_connections  100000;
use epoll;
multi_accept on; }

http {

open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s;  
open_file_cache_min_uses 2; open_file_cache_errors on;

考虑到服务器资源方面仍有工作空间,我怎么可能增加此限制?

谢谢

极限是TCP/IP堆栈配置问题。看看这个:https://www.percona.com/live/mysql-conference-2015/sites/default/files/slides/all_your_iops_are_belong_to_usPLMCE2015.pdf

不过不要对单箱寄予太大期望,分散负载。

更新

Nginx配置可根据官方性能调优建议进行审核:https://www.nginx.com/blog/tuning-nginx/

根据 mikhailov 的评论,这特别有助于分散网络的 IRQ 负载,这可能对您的情况有所帮助:

echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus