服务架构 nginx + spring cloud + redis + mysql
nginx (4 vCPU 8 GiB)
网关 1 (4 vCPU 8 GiB)
网关 2 (4 vCPU 8 GiB)
网关 3 (8 vCPU 16 GiB)
上述服务器除了 nginx 是 20mb 带宽其他都是 1mb 带宽走的阿里云内网
其他 cloud 服务,负载均正常,没有出现错误日志。
数据库使用的是阿里云的 rds 8 核 mysql 5.7
redis 内存占用 800mb
自己压力测试结果
1 、直接连接网关进行接口测试 3000 并发时会出现接口无法响应的情况
2 、从 nginx 进行均衡负载后在 1000 并发时就会出现 nginx 返回 502 的情况 错误日志报错 no live upstreams while connecting to upstream
下面是压力测试接口,单次请求详情,也是 nginx 出现 502 时大量用户请求的接口之一。
Load time:1052
Connect Time:932
Latency:1042
Size in bytes:38847
Sent bytes:260
Headers size in bytes:173
Body size in bytes:38674
Sample Count:1
Error Count:0
Data type ("text"|"bin"|""):text
Response code:200
Response message:OK
HTTPSampleResult fields:
ContentType: application/json
DataEncoding: null
接口数据是做了 redis 缓存的。
尝试过的配置,
修改服务器内核配置 /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_slow_start_after_idle = 0
还有一些配置 nginx 的 max_fails 重试次数以及配置 keepalive_timeout 超时时间等,都没有改善这个问题。
出现 502 后,服务并没有崩溃,高峰过了后一会儿就自动恢复正常了。
请问大佬们,出现这种情况都是怎么解决的呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.