# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# systemd
# LimitNOFILE=65535

调大文件句柄上限后当前终端生效,服务重启后又报打开文件过多。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,ulimit 只影响当前会话,服务由系统管理器拉起时读的是另一份配置。

「Linux ulimit 永久生效」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:修改系统级限制文件;为服务单独配置限制;重启服务确认生效。

改完只确认一件事:服务进程的实际上限为新值,长时间运行不再报句柄错误。

作者 9823189