nginx高效并行处理依赖异步非阻塞模型,需合理配置worker进程与cpu绑定、启用epoll事件模型、优化tcp传输(sendfile、tcp_nopush/nodelay)、长连接复用及系统级资源限制。

要让 Nginx 支持高效的请求并行处理,核心是发挥其异步非阻塞事件驱动模型的优势,而不是靠增加线程或进程数量。关键在于合理分配系统资源、优化连接生命周期、减少内核与用户空间的数据拷贝,并确保底层调度机制高效响应。
合理设置 worker 进程与 CPU 绑定
Nginx 采用多进程单线程模型,每个 worker 独立处理全部连接。配置不当会导致 CPU 切换开销大或资源闲置。
- 使用 worker_processes auto; 让 Nginx 自动匹配 CPU 核心数;若需精细控制(如 8 核服务器),可显式写为 worker_processes 8;
- 启用 worker_cpu_affinity auto; 或手动绑定,例如 worker_cpu_affinity 0001 0010 0100 1000;,避免进程在不同核心间迁移,提升 L1/L2 缓存命中率
- 配合 worker_rlimit_nofile 65535; 提升单个 worker 可打开的文件描述符上限,防止连接数受限
启用高性能事件模型与连接批量处理
Linux 下必须用 epoll,它支持边缘触发(ET)模式,能显著降低轮询开销,尤其适合高并发短连接场景。
- 在 events 块中明确指定:use epoll;
- 提高单 worker 并发能力:worker_connections 10240;(建议不低于 8192)
- 开启 multi_accept on;,使一个 worker 在一次事件循环中尽可能多地接受新连接,减少“惊群”效应和唤醒延迟
优化 TCP 传输与连接复用
减少三次握手、慢启动和数据包碎片,直接提升吞吐和响应速度。
- 启用零拷贝:sendfile on;,让内核直接从磁盘文件队列发送到 socket,绕过用户态内存拷贝
- 组合小包与禁用 Nagle:tcp_nopush on; tcp_nodelay on; —— 前者等缓冲区满再发(适合静态内容),后者立即发(适合 API 响应)
- 保持长连接:keepalive_timeout 65s; keepalive_requests 1000;,降低建连开销;反向代理时还要在 upstream 中配置 keepalive 100; 复用后端连接
调整系统级资源限制
Nginx 的配置只是上层,若操作系统不放行,所有优化都会失效。
- 修改 /etc/security/limits.conf:添加 * soft nofile 65535 和 * hard nofile 65535
- 增大全局文件句柄上限:echo 'fs.file-max = 2000000' >> /etc/sysctl.conf,再执行 sysctl -p
- 确保 nginx 启动用户(如 www-data 或 nginx)能继承这些限制,必要时检查 systemd service 文件中的 LimitNOFILE=65535











