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

您在银河麒麟V10上运行达梦数据库、Nginx或Java微服务时频繁报“Too many open files”,说明进程能打开的文件数量已触顶,必须同步调整用户级软硬限制、内核全局上限及systemd服务专属配置才能支撑高并发连接。
临时提升当前会话限制
执行 ulimit -Sn 查看当前软限制值;若显示1024或4096,说明严重偏低。
运行 ulimit -Sn 65535 将软限制设为65535;这一步操作起来很简单,直接在终端里敲命令就行,适合快速验证是否是限制过低引发的问题。
【注意:该设置仅对当前终端及其启动的子进程生效,关闭窗口或新建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 → 重启对应服务即可。
逐项验证是否生效
① 当前会话验证:ulimit -n 应输出 65535。
② 内核全局值验证:cat /proc/sys/fs/file-max 应大于等于 1048576。
③ systemd服务验证:对目标服务执行 sudo systemctl show DmService | grep LimitNOFILE,确认输出含 65535。
④ 进程级实时验证:查出服务主进程PID,执行 cat /proc/<strong>PID</strong>/limits | grep "Max open files",两列数值均应为 65535。

















