nginx高性能依赖linux内核参数调优:文件描述符(fs.file-max、ulimit -n)、tcp连接(ip_local_port_range、tcp_tw_reuse)、accept队列(somaxconn)、cpu亲和性、swappiness及epoll限制(epoll.max_user_watches)均需合理配置。

文件描述符限制(fs.file-max / ulimit -n)
Nginx worker 进程每处理一个连接、打开一个静态文件、转发一个代理请求,都会占用至少一个文件描述符(fd)。若内核允许的全局最大文件数(fs.file-max)或单进程软/硬限制(ulimit -n)过低,即使 nginx 配置了 worker_connections 65535,实际也无法达到预期并发。
- 查看当前值:
sysctl fs.file-max和ulimit -n - 临时调整:
ulimit -HSn 65535(需在启动 nginx 前生效) - 永久生效:在
/etc/security/limits.conf中为 nginx 用户添加:nginx soft nofile 65535nginx hard nofile 65535 - 同步内核参数:
echo 'fs.file-max = 1048576' >> /etc/sysctl.conf && sysctl -p
网络连接相关内核参数
Nginx 处理海量短连接(如 HTTP/1.1 keepalive 或 API 调用)时,会快速经历 TIME_WAIT、ESTABLISHED 等状态,内核的 TCP 栈配置直接影响连接复用效率和端口耗尽风险。
-
net.ipv4.ip_local_port_range:定义可用的临时端口范围,默认常为
32768 65535(仅约 3.2 万个),高并发反向代理易耗尽 → 建议扩至1024 65535 -
net.ipv4.tcp_tw_reuse:设为
1允许将处于 TIME_WAIT 的 socket 用于新 outgoing 连接(对 nginx 作为代理非常关键) -
net.ipv4.tcp_fin_timeout:缩短 FIN_WAIT_2 超时时间(如设为
30),加快连接回收 -
net.core.somaxconn:内核层面 accept 队列最大长度,应 ≥ nginx 的
listen ... backlog=值(默认 511),建议设为65535
CPU 与调度相关内核支持
Nginx 的 worker 进程绑定(worker_cpu_affinity)能减少 cache miss,但这依赖内核开启 CPU affinity 支持且未被 cgroup 严格限制。
- 确认系统支持:
grep -i cpuset /proc/cgroups(非零表示启用) - 避免容器环境过度限制:若运行在 systemd 或容器中,需确保
TasksMax和LimitNOFILE未压低资源上限 -
vm.swappiness 设为
1可减少内存交换,防止 worker 进程因 swap 导致延迟突增
I/O 模型依赖 epoll
Nginx 在 Linux 2.6+ 默认使用 epoll,这是内核提供的高效 I/O 多路复用机制。它要求:
- 内核版本 ≥ 2.6(现代发行版均满足)
- 不与 select/poll 混用(nginx 配置中明确写
use epoll;即可) - epoll 实例数量受 fs.epoll.max_user_watches 限制,大量 location 或动态 upstream 可能触发
Too many open files错误 → 可调高该值(如524288)











