Nginx在Linux 2.6+上默认自动启用epoll,无需也不应手动配置use epoll;需通过nginx -V、错误日志及strace验证其运行时生效,并调优内核参数、worker_connections、upstream keepalive与proxy_cache协同释放性能。

Linux 下 Nginx 源码安装时,不需要也不应该手动配置 “支持 epoll”——因为 epoll 是 Linux 内核 2.6+ 原生支持的高效 I/O 多路复用机制,Nginx 在编译时只要检测到系统环境满足条件(glibc ≥ 2.3、内核 ≥ 2.6),就会自动启用 epoll 模块,且默认作为首选事件模型。
确认 epoll 编译支持已启用
源码编译前,先检查 configure 脚本是否识别到 epoll:
- 执行
./configure --help | grep epoll,若输出含--with-epoll_module或类似提示,说明支持已内置(现代 Nginx 版本默认开启,无需显式加参数) - 编译完成后运行
nginx -V 2>&1 | grep -o with-epoll,有输出即表示 epoll 模块已编译进二进制 - 注意:不要加
--without-epoll_module,否则可能退化为 poll/select,大幅降低并发能力
编译时关键配置建议
真正影响海量并发的是配套资源限制与调度策略,而非“开启 epoll”本身:
- 指定 worker 进程数:用
--with-threads(可选)+--with-file-aio(异步文件 I/O,配合 sendfile 提升静态资源吞吐) - 避免禁用核心模块:
--without-http_upstream_keepalive_module会削弱连接复用能力,不建议关闭 - 如需最大兼容性,可加
--with-cc-opt="-O2 -g"优化编译,但不要盲目加激进优化标志(如 -march=native),可能影响稳定性
安装后必须做的三件事
epoll 生效 ≠ 高并发就自动达成,需系统层 + Nginx 层协同调优:
-
调大系统级连接上限:在
/etc/sysctl.conf中设置net.core.somaxconn = 65535fs.file-max = 1000000net.ipv4.ip_local_port_range = 1024 65535
然后执行sysctl -p -
配置 nginx.conf 的 events 块(严禁写
use epoll;):
events {<br> worker_connections 32768;<br> multi_accept on;<br> accept_mutex on;<br>}
其中worker_connections应 ≤ 系统ulimit -n值的一半(推荐设为 32768~65535) -
限制每个 worker 打开文件数:在 main 块中加
worker_rlimit_nofile 65536;
并确保启动用户(如 www-data)的limits.conf允许该值
验证 epoll 是否真正在跑
别只看配置,要看运行时行为:
- 启动 Nginx 后查错误日志:
grep "using the.*event method" /var/log/nginx/error.log,应看到using the "epoll" event method - 用
strace -p $(pgrep nginx | head -1) -e trace=epoll_wait 2>&1 | head -5(需 root),持续输出epoll_wait(...)表示正常轮询 - 压测时观察
ss -s输出的total: XXXX和tcp:行,连接数应能稳定突破万级且无大量 TIME-WAIT 积压


















