NginxAPI Gateway性能调优
场景
某电商平台API网关(Nginx)在促销活动期间出现P99延迟飙升(从50ms升至3s),部分请求超时返回502。上游服务为Kubernetes集群内的Spring Boot应用。
症状
- P99延迟超过2s
- 上游连接错误增多(upstream timed out)
- Nginx错误日志频繁出现"upstream prematurely closed connection"
- 流量未达预期峰值,但Nginx worker CPU高
诊断
- 检查Nginx状态:
curl http://localhost/nginx_status查看Active connections和Waiting队列 - 查看连接池复用率:
stub_status显示accepts/handled比例低说明连接复用不足 - 使用
wrk -t4 -c200 -d30s http://gateway/api压测,观察延迟分布 - 分析access日志:
awk '{print $NF}' access.log | sort | uniq -c | sort -rn查看响应时间分布
调优命令
1. 启用上游keepalive
编辑upstream块:
upstream backend {
server app-svc:8080;
keepalive 32;
}
并确保location中传递Connection: keep-alive头:
proxy_set_header Connection "";
proxy_http_version 1.1;
2. 调整缓冲区
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
client_body_buffer_size 128K;
3. 优化超时时间
proxy_connect_timeout 10s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
4. 调整worker连接数
event {
worker_connections 4096;
}
风险控制
- 变更前备份
/etc/nginx/nginx.conf - 在预生产环境验证
- 使用
nginx -t检查语法 - 优雅重载:
nginx -s reload(不中断连接)
回滚
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
nginx -s reload
验证
- 再次压测,确认P99延迟降至200ms以下
- 观察
nginx_status:Active connections平稳,Waiting队列降低 - 错误日志中不再出现超时记录
- 监控告警恢复
何时提交OpsGlobal工单
- 上述调优无效,错误依然存在
- 需要分析Nginx源码级问题(如epoll事件循环)
- 涉及多云或多区域网关架构时
- 需要定制Nginx模块(如自定义日志格式)
适用场景
适合正在处理 Performance、Nginx, API Gateway, 性能调优 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过真实场景演示Nginx作为API网关的性能问题诊断与调优,包括缓存、连接池、超时等配置优化,并提供安全的变更流程。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。