在容器化部署场景中,Ingress Nginx作为Kubernetes生态中最常用的入口控制器,其性能表现直接影响着整个系统的吞吐能力。我们团队在金融级交易系统中实测发现,默认配置下的Nginx Ingress单机QPS(每秒查询率)通常只能达到2-3万,而实际业务高峰期的流量需求往往超过5万QPS,这促使我们开展深度性能调优工作。
经过三个月的参数调优与内核优化,我们最终在标准16核64G内存的物理服务器上,实现了单机10万QPS的稳定吞吐,同时保持平均延迟低于20ms。这个过程中积累的配置经验,对于高并发场景下的Ingress部署具有普适参考价值。
注意:避免使用云厂商的共享型实例,物理机或独占型实例能确保性能稳定性
bash复制# 内核参数调整(/etc/sysctl.conf)
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 2097152
# 内存分配策略
vm.swappiness = 10
vm.overcommit_memory = 1
yaml复制# ingress-nginx deployment资源限制
resources:
limits:
cpu: "16"
memory: 48Gi
requests:
cpu: "8"
memory: 32Gi
nginx复制worker_processes auto; # 自动匹配CPU核心数
worker_rlimit_nofile 100000; # 每个worker能打开的文件描述符数量
events {
worker_connections 50000; # 单个worker最大连接数
multi_accept on; # 同时接受多个新连接
use epoll; # 使用epoll事件模型
}
nginx复制http {
sendfile on; # 启用零拷贝传输
tcp_nopush on; # 优化数据包发送
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 30s; # 连接保持时间
keepalive_requests 10000; # 单个连接最大请求数
client_header_timeout 10s; # 客户端头超时
client_body_timeout 10s; # 请求体超时
reset_timedout_connection on; # 重置超时连接
}
nginx复制upstream backend {
least_conn; # 最少连接算法
server backend1:80 max_fails=3 fail_timeout=30s;
server backend2:80 max_fails=3 fail_timeout=30s;
keepalive 1000; # 保持的长连接数量
}
bash复制# 调整TCP缓冲区大小
net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 快速回收TIME-WAIT sockets
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_tw_buckets = 2000000
nginx复制worker_cpu_affinity auto; # 自动绑定CPU核心
nginx复制# 每个worker的共享内存区域大小
lua_shared_dict my_cache 128m;
| 指标名称 | 监控阈值 | 采集方式 |
|---|---|---|
| Active Connections | <80% worker_conn | Nginx Status Module |
| Request Rate | >80k QPS报警 | Prometheus |
| Error Rate | >0.5% | Grafana |
bash复制# 使用wrk进行压力测试
wrk -t16 -c10000 -d60s --latency http://ingress-ip/
perf top分析热点函数smem -t -k监控内存使用ethtool -S eth0查看网卡统计worker_connections超过worker_rlimit_nofiletcp_nopush导致小包传输效率低下keepalive设置过长导致连接堆积yaml复制# 分批次逐步增加流量
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 10%
nginx复制# 当后端响应时间超过阈值时返回缓存
proxy_next_upstream timeout error http_504;
proxy_cache_use_stale error timeout updating;
经过实际生产验证,这套配置方案在金融支付、电商大促等高并发场景下表现稳定。建议每次调整后使用ab或wrk工具进行基准测试,逐步优化参数。我们团队在双11大促期间,采用此配置成功支撑了单日50亿次的API调用。