Performance nginx反向代理的吞吐量周期性下降,可能是什么?

Performance nginx反向代理的吞吐量周期性下降,可能是什么?,performance,nginx,reverse-proxy,throughput,postgrest,Performance,Nginx,Reverse Proxy,Throughput,Postgrest,我正在加载测试一个t2.micro box,它在docker容器中运行nginx和postgrest。Nginx充当postgrest前面的代理。 如果我直接去上游(postgrest),我会得到一个很好的图(峰值约为900/rps) 如果我通过nginx,我会得到这种图 CPU未达到最大值(仅约50%) 这是使用的nginx配置。所有被评论的东西都被试过了,没有任何影响。我还玩弄了员工关系和相关事物的价值观。 这种周期性下降是由什么触发的 worker_processes 2;

我正在加载测试一个t2.micro box,它在docker容器中运行nginx和postgrest。Nginx充当postgrest前面的代理。 如果我直接去上游(postgrest),我会得到一个很好的图(峰值约为900/rps) 如果我通过nginx,我会得到这种图

CPU未达到最大值(仅约50%)

这是使用的nginx配置。所有被评论的东西都被试过了,没有任何影响。我还玩弄了员工关系和相关事物的价值观。 这种周期性下降是由什么触发的

worker_processes 2; #worker_rlimit_nofile 2048; events { # multi_accept on; worker_connections 1024; use epoll; } http { resolver 127.0.0.11 ipv6=off; include mime.types; #tcp_nodelay off; #tcp_nopush on; upstream postgrest { server postgrest:3000; keepalive 64; } server { listen 80; server_name localhost; charset utf-8; location /rest/ { default_type application/json; #proxy_buffering off; proxy_pass http://postgrest/; # Reverse proxy to your PostgREST } } } 工人2; #工人信息文件2048; 事件{ #多重接受; 工人(1024);; 使用epoll; } http{ 解析程序127.0.0.11 ipv6=关闭; 包括mime.types; #tcp_节点延迟关闭; #tcp_nopush on; 上游postgrest{ 服务器postgrest:3000; 保持64; } 服务器{ 听80; 服务器名称localhost; 字符集utf-8; 地点/休息/{ 默认_类型应用程序/json; #代理缓冲关闭; 代理通行证http://postgrest/##将代理反转到您的PostgREST } } } 罪魁祸首是(默认)内核tcp设置。 当通过nginx代理时,系统耗尽了所有本地端口,然后一切停止(丢弃),直到旧的tcp连接可以完全关闭(它们及时\u等待60秒) 调整这些设置可以消除问题

#tcp settings
net.core.somaxconn
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_tw_reuse
net.ipv4.ip_local_port_range

#nginx configs
proxy_set_header  Connection "";
proxy_http_version 1.1;
下面的文章将更详细地介绍到底发生了什么,需要调整的参数


延迟图也很有趣,在第一次下降之前,它保持在10毫秒左右,然后跳到1秒左右,大部分时间都保持在那里,与吞吐量图有一点相似,但没有回到10毫秒。也没有错误,每一个请求都是200 OKa的新开发。如果让容器使用主机网络,性能会更差,下降几乎为0。任何人都知道如何比较主机和网桥模式的网络设置,以查看哪些参数不同?WBM链接到不再存在的文章以检查这是否是您的问题,运行
netstat-tan | awk'{print$6}| sort | uniq-c
,并查看您是否有大量的时间等待连接