场景
您负责生产环境中的 Nginx 或 API 网关(如 Kong、NGINX Plus 或自定义 OpenResty),发现 API 响应延迟飙升,CPU 使用率过高,甚至有超时错误。此类情况常由配置不当、缓存缺失或中间件处理瓶颈引起。
症状
- 平均响应时间增加 2 倍以上
- 上游服务器频繁 504 超时
- 系统日志中出现“upstream timed out”错误
- Nginx 工作进程 CPU 占用接近 100%
- 客户端报告连接重置或缓慢加载
诊断
首先采集基线指标:
# 查看 Nginx 活跃连接
$ curl http://localhost/nginx_status | grep -E 'Active|Waiting'
# 测量上游响应时间
$ curl -w "@curl-format.txt" -o /dev/null -s https://api.example.com/endpoint
# 分析系统负载
$ htop -p $(pgrep -f 'nginx: worker' | tr '\n' ',')
# 抓包分析延迟
$ tcpdump -i eth0 port 80 -w capture.pcap
进一步检查 Nginx 配置中的关键参数:worker_processes、worker_connections、proxy_pass、proxy_cache、proxy_buffers。使用 nginx -T 查看完整配置。
调优命令
以下命令适用于 NGINX 或 OpenResty。请先在预发布环境测试。
1. 优化工作进程
worker_processes auto; # 匹配 CPU 核心数
worker_rlimit_nofile 65536; # 增大文件描述符限制
2. 启用代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 60m;
proxy_cache_use_stale error timeout updating http_500;
add_header X-Cache-Status $upstream_cache_status;
}
}
3. 调整缓冲区和超时
proxy_buffer_size 8k;
proxy_buffers 8 8k;
proxy_busy_buffers_size 16k;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
4. 保持上游连接
upstream backend {
keepalive 32;
keepalive_requests 100;
}
server {
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://backend;
}
}
5. 启用 Gzip
gzip on;
gzip_types application/json text/plain text/css;
gzip_min_length 1000;
6. 中间件特定调优(以 Kong 为例)
- 速率限制:使用
redis策略,避免共享内存争用 - 认证:预计算并缓存 JWT 公钥,减少上行请求
- 插件链:禁用不必要的插件,避免每个请求都执行
风险控制
- 修改配置前备份当前配置:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak - 检查配置语法:
nginx -t - 逐步灰度发布:先在一台节点 reload,观察 5 分钟
- 设置监控告警:响应时间、错误率、CPU 使用率
- 使用配置管理工具(如 Ansible)确保一致性
回滚
若出现问题,立即执行:
# 恢复备份
$ cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
# 优雅重载
$ systemctl reload nginx
# 验证连接和错误日志
$ tail -f /var/log/nginx/error.log
如果更改涉及系统参数(如 sysctl),使用 sysctl -p 恢复原始值。
验证
性能验证建议使用以下工具:
# 使用 wrk 进行压力测试
$ wrk -t12 -c400 -d30s https://api.example.com/endpoint
# 对比调优前后指标:延迟百分位(p50, p95, p99)
# 使用 ab 简单测试
$ ab -n 10000 -c 100 https://api.example.com/endpoint
# 检查缓存命中率
$ curl -I https://api.example.com/endpoint | grep X-Cache-Status
理想结果:响应时间降低 50% 以上,CPU 使用率下降,无超时错误。
何时提交 OpsGlobal 工单
当您遇到以下情况时,应将问题升级至 OpsGlobal 支持团队: - 经上述调优后性能仍未改善 - 需要深度分析内核级网络问题或 Tcp 参数 - 第三方 API 网关(如 Kong)出现内部异常或插件 bug - 需定制化 Nginx 模块(如lua-resty)或编译优化 - 环境规模超过单机处理能力,需要负载均衡架构咨询
OpsGlobal 的 SRE 团队具备丰富的生产环境调优经验,可远程协助诊断并实施安全变更。
适用场景
适合正在处理 Performance、Nginx, API网关, 性能优化, SRE 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
通过成熟的调优技术解决 API 网关延迟和资源瓶颈。从 Nginx 工作进程优化到中间件缓存,本指南涵盖诊断、命令、风险控制、回滚流程及何时提交 OpsGlobal 工单。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。