multi_accept on使Nginx在单次事件循环中批量接受所有就绪连接,适用于高并发短连接场景;off时每次仅接受一个连接,适合长连接或低流量环境。

multi_accept 是 Nginx events 块中的一个指令,用于控制 worker 进程是否在一次系统调用中尽可能多地接受已就绪的连接。它不决定“能否接受多个连接”,而是影响“接受连接的时机和批量程度”。
multi_accept 的作用机制
当启用 multi_accept on 时,Nginx 在收到内核通知(如 epoll_wait 返回多个就绪 socket)后,会循环调用 accept() 直到返回 EAGAIN 或 EWOULDBLOCK,即把当前事件队列中所有待接受的连接一次性取完。
若设为 off(默认),每次只调用一次 accept(),即使队列中还有其他就绪连接,也会留待下一次事件循环处理。
开启 multi_accept 的适用场景
- 高并发短连接场景(如 HTTP API、微服务调用),可减少事件循环次数,降低延迟抖动
- 使用
epoll或kqueue等支持边缘触发(ET)或批量就绪通知的事件模型时效果更明显 - worker 进程数较少,但单个 worker 需承载大量瞬时连接请求时
配置方式与注意事项
在 nginx.conf 的 events 块中添加:
use epoll;
multi_accept on;
worker_connections 1024;
}
注意:
- 仅在使用
epoll(Linux)、kqueue(FreeBSD/macOS)或/dev/poll(Solaris)时生效;select和poll不支持该行为 - 需配合合理的
worker_connections和worker_processes设置,避免 accept 饥饿或资源耗尽 - 开启后不会提升最大连接数上限,但可能略微增加单次调度开销(通常可忽略)
是否需要开启?看实际负载特征
一般建议:
- 面向公网、流量突发明显的 Web 服务(如活动页、秒杀接口),推荐开启
- 长连接为主的服务(如 WebSocket、gRPC 流式通信),影响有限,可保持默认
- 低流量或调试环境,无需特别优化,关着更易观察连接建立节奏










