要让nginx稳定支撑千万级并发,需四层对齐:系统fs.file-max设300万~500万、fs.nr_open≥400万;用户limits.conf与systemd limitnofile均设100万;nginx配置worker_rlimit_nofile 100万。

要让 Nginx 稳定支撑千万级并发连接,系统级 fs.file-max 必须设到足够高——这不是“够用就行”,而是要为整个系统预留冗余空间。2026年生产环境的合理下限是 200万,常见高负载场景建议设为 300万~500万,极端情况(如 CDN 边缘节点或长连接网关)可设至 1000万。
确认当前值与瓶颈点
执行以下命令快速定位是否已达上限:
-
cat /proc/sys/fs/file-max—— 查看当前生效值 -
ls /proc/sys/fs/file-nr—— 输出三列:已分配、未使用、最大限制;若第二列持续接近第三列,说明快耗尽 -
ss -s | grep "total:"—— 查看当前 socket 连接总数,结合业务峰值预估 FD 消耗(每个连接 ≈ 1–2 个 FD,加上日志、配置文件等)
永久修改 fs.file-max
编辑 /etc/sysctl.conf,添加或修改这一行:
fs.file-max = 3000000
然后立即生效:
sudo sysctl -p- 验证:
cat /proc/sys/fs/file-max应输出 3000000
⚠️ 注意:该值不能超过内核支持上限(通常为 2^32-1),但也不宜盲目设到 1000 万以上——过高的值会增加内核管理开销,且多数发行版默认未启用大 FD 支持,需同步检查 fs.nr_open(见下一条)。
配套调整 fs.nr_open(关键!)
fs.nr_open 是单个进程能申请的最大文件描述符数,它必须 ≥ fs.file-max,否则即使系统总上限够高,Nginx 工作进程仍会被卡在低值(比如默认 1048576)。检查并设置:
cat /proc/sys/fs/nr_open- 若低于 3000000,追加到
/etc/sysctl.conf:
fs.nr_open = 4000000
- 再执行
sudo sysctl -p
验证 Nginx 实际可用 FD 数
仅调 fs.file-max 不等于 Nginx 就能用上千万 FD。你还必须确保:
- 用户级限制足够:
/etc/security/limits.conf中 nginx 用户(或*)有soft nofile 1000000和hard nofile 1000000 - systemd 服务限制到位:
/etc/systemd/system/nginx.service.d/override.conf加入LimitNOFILE=1000000 - Nginx 配置中启用:
worker_rlimit_nofile 1000000;(放在 main 块) - 最终验证:
cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files",输出应为1000000 1000000
不复杂但容易忽略——四个层级(系统、进程、用户、应用)必须全部对齐,缺一不可。











