Failed to allocate directory watch: Too many open files

what 发表于: 2023-11-14   最后更新时间: 2023-11-14 16:33:16   352 游览

我尝试在 Ubuntu 22.04 上更新,报:

Failed to allocate directory watch: Too many open files

我的配置是:

# sysctl fs.inotify
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192

我该怎么解决?

发表于 2023-11-14
添加评论

inotify API 目录/文件操作的系统和用户空间应用程序都需要它,以便这些应用程序了解、确认或完成其目标目录/文件更改 ... 例如 APT 在更新其缓存软件包信息(即同步)时,需要等待下载压缩归档文件的 close_write 事件报告,表明这些归档文件已完成下载,可以安全地进行解压缩(例如,当同时下载大量此类归档文件时,这一点尤为重要)。

此外,inotify (inode notify)是 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
你的答案

查看ubuntu相关的其他问题或提一个您自己的问题