为什么我收到“分配目录监视失败:打开文件太多”的提示?

为什么我收到“分配目录监视失败:打开文件太多”的提示?

我尝试在 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

相关内容