需同步调整用户级软硬限制、内核全局上限及systemd服务专属配置:1.临时提升会话限制(ulimit -sn/hn);2.永久配置limits.conf;3.调高fs.file-max;4.为systemd服务设limitnofile;5.逐项验证生效。

银河麒麟V10系统运行达梦数据库、Nginx或Java微服务时频繁报“Too many open files”,说明进程能打开的文件数量已触顶,必须同步调整用户级软硬限制、内核全局上限及systemd服务专属配置才能支撑高并发连接。
临时提升当前会话限制
执行
运行
这一步操作起来很简单,直接在终端里敲命令就行,适合快速验证是否是限制过低引发的问题。【注意:该设置仅对当前终端及其启动的子进程生效,关闭窗口或新建SSH会话后即失效】
永久配置用户级限制
用root权限编辑配置文件:【sudo nano /etc/security/limits.conf】。
在文件末尾新增两行(通配所有用户):
* soft nofile 65535
* hard nofile 65535
保存退出后,必须重新登录用户或新建SSH会话才能生效;图形界面用户需注销重进。若配置后ulimit -n仍不生效,检查PAM是否加载模块:【grep -q "pam_limits.so" /etc/pam.d/common-session || echo "missing"】;如输出missing,需手动添加session required pam_limits.so。
调高内核全局上限
第一步:查看当前值:【cat /proc/sys/fs.file-max】。
第二步:临时修改(重启失效):【sudo sysctl -w fs.file-max=1048576】。
第三步:写入配置永久生效:【echo "fs.file-max = 1048576" | sudo tee -a /etc/sysctl.conf】。
第四步:加载新配置:【sudo sysctl -p】。
用户级限制再高,也绕不过内核设定的全局天花板。若fs.file-max值小于各用户hard nofile之和,实际就卡死在低值上。
为systemd服务单独设限
方法一:全局生效
编辑/etc/systemd/system.conf,取消#DefaultLimitNOFILE=行的注释,改为:【DefaultLimitNOFILE=65535】→执行sudo systemctl daemon-reload→重启systemd-logind服务。
方法二:按服务精准控制
例如针对达梦数据库服务,运行【sudo systemctl edit DmService】→在打开的编辑器中输入:
[Service]
LimitNOFILE=65535
保存后执行sudo systemctl daemon-reload→重启对应服务即可。











