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的使用率。不要只盯着一个指标看。
相关阅读
枣阳企业建站技术选型指南响应式设计与移动优先策略详解
本文专门面向枣阳企业建站的技术科普文章,详细讲解响应式网页设计的原理、移动优先的设计策略、主流前端技术选型,帮助非技术人
枣阳企业数据库选型指南主流数据库应用场景对比分析
面向枣阳企业技术决策者的数据库选型科普文章,对比MySQL、PostgreSQL、MongoDB三种主流数据库的特点、优
枣阳网站SEO技术优化实操指南从代码层面提升搜索排名
从技术开发角度讲解SEO优化的具体实施方法,包括语义化HTML标签、结构化数据标记、网站地图生成、robots.txt配
枣阳小程序开发技术架构对比微信支付宝抖音小程序差异分析
技术对比分析微信、支付宝、抖音三大平台小程序的技术架构差异、开发语言、能力边界、适用场景,帮助枣阳企业在选择小程序平台时
Vue3 vs React:2024年前端框架对比评测(襄阳技术圈)
Vue3和React是目前最火的两个前端框架。本文从多个维度进行客观对比,帮助开发者做出技术选型决策。