Nginx 高性能传输三剑客:sendfile、tcp_nopush 与 tcp_nodelay 深度解析
一句话总结:
sendfile减少内存拷贝,tcp_nopush合并小包,tcp_nodelay禁用延迟确认——三者协同可让静态文件下载吞吐提升 30%+。但配错组合反而会拖慢 API 响应!本文将从 Linux 内核机制到 Nginx 源码,彻底讲清它们的适用边界。
一、为什么这三个指令如此重要?一个 CDN 节点的性能瓶颈故事
你负责一个全球 CDN 节点,日均服务 10 亿次静态资源请求。监控显示:
- CPU 使用率高达 70%,主要消耗在
memcpy - 小文件(<10KB)QPS 上不去,延迟波动大
- 大文件(>100MB)下载带宽未打满
排查发现:Nginx 默认配置未针对不同场景优化传输策略。
而sendfile、tcp_nopush、tcp_nodelay正是解决这些问题的关键开关。它们不是“开就快”,而是需要根据业务类型精准搭配。