必须先调优内核参数fs.file-max等才能让Nginx支持高并发,其中fs.file-max需设为2097152(200万)并配合net.core.somaxconn、tcp_max_syn_backlog等网络参数优化,否则用户级配置无法突破瓶颈。

要让 Nginx 真正支持高并发连接,光改 nginx.conf 不够,必须先打通系统内核这一层限制。内核参数 fs.file-max 是整个系统的文件描述符总上限,它像天花板一样压着所有进程——哪怕你给 Nginx 配了 65535,若内核只允许全系统打开 10 万 FD,而其他服务已占去 8 万,Nginx 就很难拿到足够资源。
设置 fs.file-max(系统级总上限)
这个值决定系统最多能分配多少文件描述符,必须设得比 Nginx 实际所需高一个量级:
-
临时生效(验证用):运行
sysctl -w fs.file-max=2097152(即 200 万) -
永久生效:编辑
/etc/sysctl.conf,添加一行:fs.file-max = 2097152,然后执行sysctl -p - 合理取值参考:建议设为内存 KB 总数的 5%–10%。例如 64GB 内存(67108864 KB),取 8% 得约 536 万;但实际生产中 200 万已覆盖绝大多数百万级并发场景,避免过高引发 OOM
同步检查并调整其他关键内核参数
仅调 fs.file-max 不够,还需配套优化网络栈,防止连接建立阶段就卡住:
-
扩大监听队列:
net.core.somaxconn = 65535(防止“Connection refused”) -
增强 SYN 处理能力:
net.ipv4.tcp_max_syn_backlog = 65535(应对突发建连压力) -
启用快速回收(可选):若大量短连接,可加
net.ipv4.tcp_tw_reuse = 1,但需确保时间戳开启(net.ipv4.tcp_timestamps = 1)
验证是否生效
别依赖配置文件是否写对,直接看内核当前值:
- 运行
cat /proc/sys/fs/file-max,输出应与你设置的值一致 - 检查其他参数:如
cat /proc/sys/net/core/somaxconn - 注意:修改后无需重启机器,
sysctl -p即刻加载
这一步是后续所有调优的基础。如果这里没调好,用户级 limits、Nginx 的 worker_rlimit_nofile 全部无法突破瓶颈。


















