我尝试在 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 我该怎么解决?
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
你的答案