/proc/sys/fs/file-max 控制内核可分配的文件描述符总数,影响所有进程总和,需配合 nr_open、ulimit-n 等参数协同调整,临时修改用 sysctl -w 或写入 procfs,永久生效需写入 /etc/sysctl.conf 并执行 sysctl -p。

/proc/sys/fs/file-max 控制的是整个内核可分配的文件描述符总数,不是单个进程的限制,而是所有进程加起来能用的最大句柄数。它类似于系统级“文件句柄池”的总容量,调高它才能支撑高并发服务(如 Nginx、Redis、Java 微服务集群)同时打开大量连接或文件。
查看当前系统级上限
直接读取即可:
cat /proc/sys/fs/file-max输出类似 3280853,表示当前允许最多约 328 万个文件描述符被内核分配。
临时修改(重启失效)
适合快速验证或紧急扩容:
- 用 sysctl 命令:sudo sysctl -w fs.file-max=6291456
- 或直接写入 procfs:echo 6291456 | sudo tee /proc/sys/fs/file-max
执行后立即生效,无需重启服务,但服务器重启会恢复原值。
永久生效(推荐生产环境使用)
需写入 sysctl 配置并加载:
- 追加配置到 /etc/sysctl.conf:
echo "fs.file-max = 6291456" | sudo tee -a /etc/sysctl.conf - 加载新配置:
sudo sysctl -p
该值建议设为预期峰值总连接数的 1.2~1.5 倍。例如,预估 Nginx + 后端服务共需 400 万 fd,则设为 480 万~600 万较稳妥。
关键注意事项
这个值不能高于 /proc/sys/fs/nr_open(单进程理论天花板),否则内核启动时会自动截断到 nr_open 的值。所以如果后续要支持单进程百万级 fd,得先确认或调高 nr_open。
另外,file-max 只是“总量”控制,单进程能否用到这么多,还取决于 ulimit -n 和用户 limits.conf 配置 —— 它们必须协同调整,否则改了 file-max 也无济于事。











