我刚刚安装了 Ubuntu 16.04,启动时收到此警告智能Git:
IOException: User limit of inotify watches reached
此外,我收到此警告tail -f
:
tail: inotify resources exhausted
tail: inotify cannot be used, reverting to polling
我在使用 Ubuntu 14.04 时从未遇到过此错误,并且我在新 Ubuntu 上使用的应用程序和文件与我在以前的版本中使用的完全相同。
唯一相关的区别是我在 PC 上添加了一个额外的硬盘,并且配置了 Ubuntu 的备份工具。这个问题是否与第二个磁盘或备份工具有关?
答案1
Xenial 上的当前默认值是 8192(参见内核源代码中的 fs/notify/inotify/inotify_user.c),您可以通过将文件打印到标准输出来验证这一点:
cat /proc/sys/fs/inotify/max_user_watches
8192
您可以将数字增加一倍至 16384,方法是:
echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches
请记住,inotify 监视确实会消耗内存,我认为在 64 位系统上每个监视大约消耗 160 字节。
要永久设置此功能,请在 /etc/sysctl.conf 中添加一个条目,例如:
echo fs.inotify.max_user_watches=16384 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
..或者手动编辑/etc/sysctl.conf
(您需要 root 权限才能更新它)然后运行sudo sysctl -p
答案2
上述答案很有效,但它并没有解释为什么我一直在寻找一个完整的答案 -
为什么?
同步文件的程序(例如 dropbox、git 等)使用 inotify 来通知文件系统的更改。可以通过以下方式查看限制 -
cat /proc/sys/fs/inotify/max_user_watches
对我来说,这表明100000。当此限制不足以监控目录内的所有文件时,就会抛出此错误。
增加 inotify 观察者的数量(简短版本):
如果你正在跑步Debian、RedHat 或其他类似的 Linux 发行版,在终端中运行以下命令:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
如果你正在跑步ArchLinux,请运行以下命令(请参阅此处了解原因):
echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
然后将其粘贴到您的终端并按回车键运行它。
技术细节:
Listen 在 Linux 上默认使用 inotify 来监控目录的更改。系统对可监控文件数量的限制并不罕见。例如,Ubuntu Lucid(64 位)的 inotify 限制设置为 8192。
您可以通过执行以下命令获取当前的 inotify 文件监视限制:
$ cat /proc/sys/fs/inotify/max_user_watches
当此限制不足以监视目录内的所有文件时,必须增加限制以使 Listen 正常工作。
您可以使用以下方式临时设置新的限制:
$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p
如果您想让您的限制永久生效,请使用:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
如果 Listen 继续抱怨,您可能还需要注意 max_queued_events 和 max_user_instances 的值。
来源:https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers
答案3
您可以检查现有的限制,并在此基础上根据您的要求进行修改
To Check : cat /proc/sys/fs/inotify/max_user_watches To Alter : sudo sysctl fs.inotify.max_user_watches=524288
这将解决错误。