错误提示:"已达到inotify监视器的用户限制". ExtReact 构建

28
我安装了带有示例的ExtReact。当我运行时,
npm start

我收到了一个错误:

ERROR in [@extjs/reactor-webpack-plugin]: Error:
[ERR] BUILD FAILED
[ERR] com.sencha.exceptions.BasicException: User limit of inotify watches 
reached
[ERR]
[ERR] Total time: 13 seconds

[ERR] /home/user/project/build/ext-react/build.xml:101: 
com.sencha.exceptions.BasicException: User limit of inotify watches reached
[ERR] A log is available in the file "/home/user/project/build/ext-
react/sencha-error-20171027.log"
如何修复此错误?
4个回答

64

为什么?

像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

将其粘贴到终端并按Enter运行。


技术细节:

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


1
完全不理解发生了什么,但这个答案解决了我的问题,而被接受的答案则没有任何作用(至少是立即的)。可能需要一个“sudo sysctl -p”? - CPBL
1
我经常遇到这个答案,所以我想补充一下,524288的值实际上是允许的字节数,而不是文件监视器的数量(这很有道理,那将是大量要监视的文件)。32位系统需要每个被监视的文件540字节,而64位系统则使用双倍。我在这个答案中找到了这些信息:https://unix.stackexchange.com/a/13757。 - Matt

12

我通过编辑/etc/sysctl.conf来解决这个问题。我向文件中添加了以下内容:

fs.inotify.max_user_watches=100000

2
在Ubuntu 18.10上,这对我没有任何影响。也许您需要在/etc/sysctl.conf中进行更改后执行sudo sysctl -p命令? - CPBL
2
对我有用,加上@CPBL的评论。 - Abdelilah Aassou

3
在Linux Mint上,运行此命令即可开始。
echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接