系统最大文件描述符限制由内核参数 fs.file-max 控制,表示全系统可分配的总数;查看用 cat /proc/sys/fs/file-max,临时修改用 sysctl -w,永久修改需写入 /etc/sysctl.conf 并执行 sysctl -p。

Linux 中修改系统最大文件描述符限制,关键在于区分系统级总上限(file-max)和用户/进程级限制(nofile)。你问的是“系统最大”,即全系统能分配的文件描述符总数,对应内核参数 fs.file-max——它不是单个进程的限制,而是所有进程加起来不能突破的硬边界。
查看当前系统级最大值
直接读取内核参数:
cat /proc/sys/fs/file-max
这个数字代表整个内核可管理的文件描述符总量。如果服务频繁报 Too many open files 且 cat /proc/sys/fs/file-nr 显示第一项(已分配)接近该值,就说明真到了系统瓶颈。
临时调高(重启失效)
适合测试或应急:
sudo sysctl -w fs.file-max=2097152
数值建议按内存估算:物理内存(MB)× 10,例如 64GB 内存 → 64 × 1024 × 10 ≈ 655360,设为 2097152(2M)更稳妥。
永久生效(推荐)
编辑 /etc/sysctl.conf,追加一行:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
echo "fs.file-max = 2097152" | sudo tee -a /etc/sysctl.conf
然后加载:
sudo sysctl -p
验证是否写入成功:
sysctl fs.file-max
注意两个关联但易被忽略的点
-
fs.nr_open是单进程硬上限的天花板limits.conf中设的hard nofile不能超过nr_open,否则会被静默截断。查看它:cat /proc/sys/fs/nr_open
如需提高(例如设
hard nofile 1000000),先确保nr_open足够:echo "fs.nr_open = 2000000" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
-
别只改
file-max就以为万事大吉
系统级上限只是“水池总容量”,你还得保证:- 用户登录时有足够
nofile(配/etc/security/limits.conf); - systemd 服务有
LimitNOFILE(不读limits.conf); - 进程实际打开数没超(用
ls -l /proc/<pid>/fd | wc -l查)。
- 用户登录时有足够
不复杂但容易忽略。

















