Nginx性能调优实战:从1万QPS到10万QPS(襄阳运维笔记)

2026-08-07 阅读 2 技术博客

基准测试

测试环境:4核8G云服务器(CentOS 7.9)、Nginx 1.24、静态HTML页面(2KB)。压测工具:wrk(12线程400连接)。

默认配置下的基准QPS:约12,000。CPU利用率约65%,瓶颈在CPU上下文切换和网络IO。

第一步:worker进程优化

nginx.conf中设置 worker_processes auto;(自动匹配CPU核数) worker_rlimit_nofile 65535; (每个worker最大文件描述符) worker_connections 10240; (每个worker最大连接数)

另外要在/etc/security/limits.conf中增加:* soft nofile 65535 * hard nofile 65535

这一步做完后QPS提升到了约18,000(+50%)。主要收益来自连接数的提升。

第二步:启用高效传输模式

http块中添加:sendfile on; tcp_nopush on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript text/xml;

sendfile利用内核空间的文件传输避免了数据在用户空间和内核空间之间的拷贝。gzip压缩减少了网络传输量(文本资源通常能压缩60%-80%)。

这一步后QPS约22,000。对于文本内容的页面效果更明显。

第三步:缓存和缓冲优化

open_file_cache max=65535 inactive=60s; open_file_cache_valid 60s; open_file_cache_min_uses 2;

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:64m inactive=1h max_size=1g;

文件句柄缓存减少了stat系统调用的次数。FastCGI缓存(如果用PHP的话)避免重复的计算开销。

QPS提升到约28,000。

第四步:Linux内核参数调优

/etc/sysctl.conf中添加:net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_tw_reuse = 1 net.core.netdev_max_backlog = 65535

执行sysctl -p生效。这些参数调整了TCP队列长度和端口复用策略。

QPS跳到了约45,000!内核参数的影响非常大。

第五步:终极优化

如果还要继续提升,可以考虑:使用OpenResty(Nginx + LuaJIT)替代原生Nginx、上CDN分担静态资源请求、多机负载均衡。

我们在{CITY}的一个客户项目上用了OpenResty + CDN + 2台服务器的方案,最终QPS稳定在120,000+。当然这个数值因业务场景而异,仅供参考。

监控指标

优化过程中要持续关注:QPS(每秒请求数)、RT(响应时间,P50/P95/P99)、Error Rate(错误率)、CPU/Memory/Disk/Network的使用率。不要只盯着一个指标看。

相关阅读

电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询

×