Nginx是大型架构而核心,下面我重点详解 Nginx性能瓶颈@mikechen
1. worker_processes
决定 Nginx 启动的工作进程数,通常与系统 CPU 核心数相关。
优化建议:将其设置为物理或逻辑 CPU 核心数(auto
常用)。
以充分利用多核并行能力,避免过多进程竞争导致上下文切换开销增加。
注意:在使用阻塞型后端模块或高 I/O 的场景下,可结合实际负载微调。
2. worker_connections
含义:每个 worker 进程可同时打开的最大连接数。
优化建议:根据并发需求与文件描述符上限计算合理值:并发连接 ≈ worker_processes × worker_connections
。
若使用 keepalive,需将此值适当增大以支持持续连接。
注意:需配合操作系统的 ulimit -n
(文件描述符限制)同步调整。
3. keepalive_timeout
含义:保持长连接(keep-alive)的超时时间。
优化建议:对延迟敏感且连接复用高的场景,适度延长(如几秒到几十秒),以减少 TCP 建立/拆除开销。
对连接数极大且短请求的场景,适度缩短以释放连接资源。
注意:长时间的 keepalive 会占用连接槽位,可能导致并发能力下降。
4. sendfile
含义:一组与 I/O 与 TCP 性能相关的开关,分别用于零拷贝文件发送与 TCP 包合并/延迟策略。
优化建议:在传输静态大文件时开启 sendfile
与 tcp_nopush
,以减少内核拷贝与网络报文数。
在需要低延迟交互(小响应、实时性要求高)时开启 tcp_nodelay
。
注意:不同组合在不同场景下表现不同,应通过压力测试判定最优配置。
5. client_max_body_size
控制客户端请求体的最大允许大小、与缓冲区使用策略。
优化建议:根据应用对上传大小的限制。
合理设置 client_max_body_size
避免过大请求耗尽带宽或存储;
通过 client_body_buffer_size
控制内存与磁盘缓存的权衡(小缓冲时大请求会写入临时文件)。
注意:上传场景频繁时需关注临时目录磁盘 I/O 与空间。