Linux上推荐use epoll,因其时间复杂度O(1)、仅通知就绪fd、支持ET/LT模式;需在events块中显式配置,仅限Linux 2.6+,非必需但建议显式声明以提升可读性与可维护性。

在 Nginx 的 events 块中,use epoll 是 Linux 系统下推荐的事件驱动模型,能显著提升高并发场景下的性能。
为什么在 Linux 上推荐 use epoll
epoll 是 Linux 内核提供的 I/O 多路复用机制,相比 select 和 poll,它在连接数多、活跃度低的场景中更高效:
- 时间复杂度为 O(1),不随连接数增长而变慢
- 只通知真正就绪的文件描述符,避免遍历所有连接
- 支持边缘触发(ET)和水平触发(LT),Nginx 内部默认使用 ET 模式优化吞吐
如何正确配置 use epoll
只需在 nginx.conf 的 events 块中显式指定:
events {
use epoll;
worker_connections 10240;
}
注意:
-
use epoll仅在 Linux 内核 2.6+ 上有效,其他系统(如 macOS、FreeBSD)会忽略或报错 - Nginx 启动时若未指定
use,会按系统顺序自动选择最优模型(Linux 下默认就是epoll) - 无需额外安装依赖或内核模块,只要系统支持即可直接启用
常见误区与验证方法
很多人误以为加了 use epoll 就一定生效,其实要注意:
- 配置语法错误(如拼写成
epoll;缺少use)会导致启动失败 - 如果 Nginx 编译时禁用了
epoll支持(极少见),即使写了也不会生效 - 可通过
nginx -V 2>&1 | grep -o 'epoll'查看编译时是否启用了该模块 - 运行中可用
lsof -p $(cat /var/run/nginx.pid) | grep epoll观察是否打开了epoll文件描述符
是否必须手动写 use epoll
不是必须,但建议显式写出:
- 增强配置可读性,明确意图
- 避免跨平台迁移时因自动探测逻辑差异导致行为不一致
- 便于运维快速识别当前使用的事件模型


















