最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在 Nginx 中配置最大文件描述符限制支持海量并发连接访问
时间:2026-08-15 12:41:48 编辑:袖梨 来源:一聚教程网
要让Nginx真正撑住海量并发,必须同步打通系统、用户、Nginx三层文件描述符限制:systemd优先级最高(如LimitNOFILE=1048576),其次nginx.conf中worker_rlimit_nofile,再配limits.conf;HTTPS下每个连接耗3–5个FD,worker_rlimit_nofile应按worker_connections×4设并留余量,最后验证proc/pid/limits是否生效。
要让 Nginx 真正撑住海量并发(比如数万甚至十万级连接),光改 worker_connections 不够,必须让“最大文件描述符限制”在系统、用户、Nginx 三层全部打通——任何一层卡住,都会触发 accept() failed (24: Too many open files) 错误。
确认当前哪一层实际生效了
别猜,直接查:
- 运行
ulimit -n,看当前 shell 的 soft nofile 值(影响 Nginx 启动环境) - 执行
cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files",这是 Nginx worker 进程真正拿到的上限(最关键的判断依据) - 运行
sysctl fs.file-max,确认系统总容量是否足够(建议 ≥worker_processes × worker_connections × 1.5)
同步放开三类限制(缺一不可)
优先级从高到低:systemd > nginx.conf > limits.conf
-
systemd 服务级(最高优先级):编辑
/etc/systemd/system/nginx.service.d/override.conf,加入:[Service]
LimitNOFILE=1048576
然后执行
systemctl daemon-reload && systemctl restart nginx -
Nginx 主配置声明:在
nginx.conf的全局块(main context)中添加:worker_rlimit_nofile 1048576;注意:该值不能超过 systemd 或 limits.conf 中设置的 hard nofile,否则启动失败
-
用户级持久限制:在
/etc/security/limits.conf中为 nginx 用户(或通配 *)设置:* soft nofile 1048576
* hard nofile 1048576
如果用 root 启动再降权,root 的限制也得达标
匹配真实连接压力来设值
HTTPS 场景下每个连接实际占用 3–5 个文件描述符,HTTP 约 1–2 个。不要只按 worker_connections 设:
- 若
worker_connections 65535,且启用 HTTPS,worker_rlimit_nofile至少设为262140(65535 × 4),推荐直接设1048576留足余量 - 同时检查
worker_processes auto;和worker_cpu_affinity auto;是否启用,避免连接堆积在少数 worker 上 - 配合内核参数:
fs.file-max = 2097152、net.core.somaxconn = 65535,写入/etc/sysctl.conf并sysctl -p生效
验证是否真正生效
重启后务必验证:
- 再次运行
cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files",确保 soft/hard 均显示你设定的数值(如 1048576) - 用
ab或wrk发起高并发压测,观察 error log 是否还有Too many open files - 监控
ss -s或lsof -p $(cat /var/run/nginx.pid) | wc -l,对比活跃连接与 FD 使用量
相关文章
- 胜利女神新的希望新手如何入门 08-15
- 《重返未来:1999》梁月养成攻略 08-15
- 战舰联盟环球竞技场中哪个战列舰好 08-15
- 《异环》好狗狗走四方介绍 08-15
- 伊莫试炼迷宫是什么 08-15
- 原神akt资源网页入口-akt原神网站入口链接地址 08-15