systemd中LimitNOFILE不生效的主因是override文件路径或语法错误:必须置于/etc/systemd/system/nginx.service.d/override.conf,且仅含[Service]段和LimitNOFILE=65536;需执行daemon-reload并用show验证生效。

如果你发现 Nginx 的 LimitNOFILE 在 systemd 中配置了却没生效,大概率是 systemd override 文件格式写错了——这不是 Nginx 配置问题,而是 systemd 单元覆盖文件的语法或路径不合规导致的。
确认 override 文件位置和命名是否正确
systemd 要加载 override,必须满足两个硬性条件:
- 文件路径必须是
/etc/systemd/system/nginx.service.d/override.conf(注意:目录名带.d,文件名建议用override.conf或10-limit.conf,但不能叫nginx.conf或limit.conf) - 父目录
nginx.service.d/必须存在且权限为drwxr-xr-x,否则 systemd 会静默跳过整个目录
检查 override 文件内容格式是否合法
常见错误包括:
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
- 开头多写了
[Unit]或[Install]——LimitNOFILE只能出现在[Service]段,且该段必须存在 - 用了中文标点、全角空格、BOM 头(尤其 Windows 编辑器保存时容易带)
- 数值写成
65536是对的,但写成65536n、"65536"或65536L会解析失败
正确写法示例:
[Service] LimitNOFILE=65536
验证 override 是否被 systemd 实际加载
别只看文件是否存在,要让 systemd 重新读取并检查实际生效值:
- 运行
sudo systemctl daemon-reload(必须!否则修改无效) - 执行
systemctl show nginx --property=LimitNOFILE,输出应为LimitNOFILE=65536 - 再查运行中的进程限制:
cat /proc/$(pidof nginx)/limits | grep "Max open files",确认软硬限制都已更新 - 如果仍显示默认值(如 4096),说明 override 未被加载,重点检查上一步的路径和语法
排除 systemd 版本与全局限制干扰
某些旧版 systemd(如 CentOS 7 默认的 219)对 LimitNOFILE 解析较严格;另外,若设置了 DefaultLimitNOFILE 在 /etc/systemd/system.conf 中,它可能被服务单元继承,但会被 override.conf 显式值覆盖。建议:
- 先注释掉
DefaultLimitNOFILE行,避免干扰判断 - 确认 Nginx 是通过
systemctl start nginx启动的,而不是手动nginx命令(后者完全绕过 systemd 限制) - 重启服务后再次验证:
sudo systemctl restart nginx && systemctl show nginx --property=LimitNOFILE

















