<p>云服务器初始化时最大文件限制需分三层配置:先调大内核fs.file-max至2097152并sysctl -p生效;再在limits.conf中设* soft/hard nofile 65535并重新登录;最后为systemd服务(如nginx)单独配置LimitNOFILE=65535并重载重启,缺一不可。</p>

云服务器初始化时配置最大文件限制,核心是分层设置:先调大内核全局上限,再设用户级软硬限制,最后适配 systemd 托管的服务。三者缺一不可,否则会出现“ulimit -n 显示正常,但服务仍报 Too many open files”的情况。
同步调整内核级文件句柄总量
这是所有限制的天花板。若不调高,用户级设置会被自动截断。
- 编辑 /etc/sysctl.conf,追加一行:
fs.file-max = 2097152 - 立即生效:
sudo sysctl -p - 验证:
cat /proc/sys/fs/file-max → 应输出 2097152
配置用户级打开文件数限制
该设置通过 PAM 加载,影响所有登录会话(含图形界面和 SSH 登录启动的应用)。
- 编辑 /etc/security/limits.conf,在末尾添加两行(注意:空格必须是英文空格,不能用 Tab):
* soft nofile 65535
* hard nofile 65535 - 保存后,必须重新登录 SSH 或注销图形会话(仅重启终端无效)
- 验证:
新登录后执行 ulimit -n → 应返回 65535
适配 systemd 启动的服务
Nginx、Redis、MySQL 等默认忽略 limits.conf,需单独配置。
- 推荐方式:为关键服务单独设置
例如为 nginx 创建覆盖配置:
sudo mkdir -p /etc/systemd/system/nginx.service.d
echo "[Service]\nLimitNOFILE=65535" | sudo tee /etc/systemd/system/nginx.service.d/override.conf - 全局方式(可选):
编辑 /etc/systemd/system.conf,取消注释并修改:
DefaultLimitNOFILE=65535 - 无论哪种方式,都要执行:
sudo systemctl daemon-reload
再重启对应服务:
sudo systemctl restart nginx
逐层验证是否真正生效
不能只看 ulimit -n,要确认三层都到位:
- 当前 shell:ulimit -n → 65535
- 系统全局:cat /proc/sys/fs/file-max → ≥65535(建议 2097152)
- 服务进程:
sudo cat /proc/$(pgrep nginx)/limits | grep "Max open files"
输出中应显示 65535 而非 1024 或 4096


















