![为什么我收到“分配目录监视失败:打开文件太多”的提示?](https://linux22.com/image/952413/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E6%94%B6%E5%88%B0%E2%80%9C%E5%88%86%E9%85%8D%E7%9B%AE%E5%BD%95%E7%9B%91%E8%A7%86%E5%A4%B1%E8%B4%A5%EF%BC%9A%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6%E5%A4%AA%E5%A4%9A%E2%80%9D%E7%9A%84%E6%8F%90%E7%A4%BA%EF%BC%9F.png)
我尝试在 22.04 上更新
Failed to allocate directory watch: Too many open files
Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
Hit:2 https://apt.releases.hashicorp.com jammy InRelease
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Hit:4 https://deb.nodesource.com/node_18.x jammy InRelease
sysctl fs.inotify.max_user_instances
fs.inotify.max_user_instances = 128
應該是什么sysctl fs.inotify
样子的?
答案1
这 inotify API 提供一种监控文件系统事件的机制。Inotify 可用于监控单个文件或目录。当监控目录时,inotify 将返回目录本身以及目录内文件的事件。
涉及目录/文件操作的系统和用户空间应用程序都需要它,以便这些应用程序了解、确认或实现其目标目录/文件更改...例如:APT 在更新其缓存的软件包信息时(即同步)下载压缩档案,需要等待close_write
这些档案上报告事件,表明它们已完成下载,并且可以安全地继续提取它们(当大量档案同时下载时,这一点尤其重要)。
此外,
inotify(inode 通知)是 John McCutchan 创建的 Linux 内核子系统,用于监视文件系统的更改并将这些更改报告给应用程序。它可用于自动更新目录视图、重新加载配置文件、记录更改、备份、同步和上传。
它需要系统资源来运行并完成其(单数形式是为了简化书写,但实际上它们是多个实例和多个手表) 作业……并且作为这样的内核子系统,其本质使得它能够利用其他资源,其中包括所谓的内核内存这是总可用系统内存的一部分,为内核使用而保留,并且禁止用户空间应用程序使用,并且其大小也受到限制...因此,出于必要,必须严格管理此内核内存的使用,不允许某个子系统超越它,从而对系统稳定性产生负面影响...因此,您可以像这样查看对 inotify 施加的限制:
$ sysctl fs.inotify
fs.inotify.max_queued_events = 16384
`fs.inotify.max_user_instances` = 128
fs.inotify.max_user_watches = 65536
这些限制实际上可以(安全地在多数情况下)如果需要可以增加...如果您在运行新应用程序时看到错误消息,表明已达到限制,就像您的情况一样,那么很可能是fs.inotify.max_user_instances
该应用程序导致的这种情况...您可以暂时将其增加到例如256
:
sudo sysctl -w fs.inotify.max_user_instances=256
这将立即生效,但会在重启后重置...建议先测试系统的稳定性...但是,如果您决定需要永久设置并在重启后继续使用,那么您可以编辑/etc/sysctl.conf
并将其添加为新行,如下所示:
fs.inotify.max_user_instances=256