Nginx性能调优实战:从1万QPS到10万QPS(襄阳运维笔记)
基准测试
测试环境: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的使用率。不要只盯着一个指标看。
相关阅读
Docker容器化部署的最佳实践(襄阳开发团队经验)
Docker已经成为事实上的容器标准。本文总结在生产环境中使用Docker的最佳实践,帮助你避开常见的坑。
RESTful API设计的十个常见错误(襄阳后端工程师总结)
好的API设计能让前后端协作效率倍增。本文总结了RESTful API设计中常见的十个错误及正确做法。
MySQL慢查询优化的方法论和实战案例(襄阳DBA手记)
数据库慢查询是Web应用最常见的性能瓶颈。本文总结一套系统化的MySQL优化方法论,配合真实案例讲解。
Vue3 vs React:2024年前端框架对比评测(襄阳技术圈)
Vue3和React是目前最火的两个前端框架。本文从多个维度进行客观对比,帮助开发者做出技术选型决策。
枣阳网站性能优化实战技巧页面加载速度提升三倍方法
专业实用地分享实用的网站性能优化技巧,包括图片压缩、资源合并、CDN使用、浏览器缓存、代码精简等方法,帮助枣阳企业显著提