奇形怪状的错误之 Too many open files

493 阅读2分钟

日常巡检更新,突然发现的问题

在执行 apt clean && apt update 时,出现以下错误提示:

~ apt clean && apt update 
Failed to allocate directory watch: Too many open files 
命中:1 http://mirrors.aliyun.com/ubuntu focal-security InRelease 
命中:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease 
命中:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease 
命中:4 http://security.ubuntu.com/ubuntu jammy-security InRelease

错误分析:

根据错误提示“Failed to allocate directory watch: Too many open files”,这个问题通常是由 文件描述符限制 不足引起的。Linux 系统默认每个进程可以打开的文件数是有限制的,当某些进程(如 apt)需要打开大量文件时,便会触发该错误。

解决方案:

1. 临时提高文件描述符限制

可以通过以下命令临时提高文件描述符的限制:

ulimit -n 65536

这会将当前会话的最大文件描述符数增加至 65536。

2. 永久修改文件描述符限制

若希望永久修改该限制,可以按以下步骤操作:

  • 编辑 /etc/security/limits.conf 文件,添加如下内容(若没有的话):
* soft nofile 65536
* hard nofile 65536
  • 编辑 /etc/pam.d/common-session/etc/pam.d/common-session-noninteractive 文件,添加以下行:
session required pam_limits.so

3. 更新后依旧无效

尽管尝试了上述方案,问题仍然没有解决,错误提示依旧出现。

解决突破:

习惯性地在更新前检查 Docker 容器数量时,突然发现 Docker 中满满的两页容器,截图展示如下:

image.png 经过这一番惊悚发现后,我决定直接更新系统。更新过程中 Docker 触发了重启,重启后问题自动解决。


总结:

通过查看和清理 Docker 容器,最终发现了问题的症结所在,更新后触发的重启解决了文件描述符不足的问题。这是一个典型的资源限制问题,尤其是在容器化环境中容易出现类似情况。