日常巡检更新,突然发现的问题
在执行 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 中满满的两页容器,截图展示如下:
经过这一番惊悚发现后,我决定直接更新系统。更新过程中 Docker 触发了重启,重启后问题自动解决。
总结:
通过查看和清理 Docker 容器,最终发现了问题的症结所在,更新后触发的重启解决了文件描述符不足的问题。这是一个典型的资源限制问题,尤其是在容器化环境中容易出现类似情况。