我已经设置了一个新的空白反应本机应用程序。

在安装了几个节点模块后,我得到了这个错误。

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

我知道这与没有足够的空间让守望者监视所有文件更改有关。

我想知道在这里采取的最佳行动是什么?

我应该忽略node_modules文件夹添加到.watchmanconfig ?


当前回答

此错误的含义是系统监控的文件数量已达到限制!!

Result: The command executed failed!或者抛出一个警告(比如执行一个react-native start VSCode)

解决方案:

修改系统监控文件个数

Ubuntu

Sudo gedit /etc/sysctl.conf

在底部加一条线

fs.inotify.max_user_watches = 524288

然后保存并退出!

Sudo sysctl -p

检查一下

那么问题就解决了!

其他回答

此错误的含义是系统监控的文件数量已达到限制!!

Result: The command executed failed!或者抛出一个警告(比如执行一个react-native start VSCode)

解决方案:

修改系统监控文件个数

Ubuntu

Sudo gedit /etc/sysctl.conf

在底部加一条线

fs.inotify.max_user_watches = 524288

然后保存并退出!

Sudo sysctl -p

检查一下

那么问题就解决了!

简单的解决方案

我发现,之前的解决方案在我的情况下很有效。我删除了node_modules并清除了yarn / npm缓存。

长尾解决方案

如果你想要一个长尾解决方案——例如,如果你经常被这个错误捕获——你可以增加允许的观察者的值(取决于你的可用内存)

要计算出当前使用的观察者数量,而不是仅仅猜测,你可以使用这个方便的bash脚本:

https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers

我建议将max_user_watches临时设置为一个高值: Sudo sysctl fs.inotify。Max_user_watches =95524288并运行脚本。

如何计算你可以用多少

每个观众都需要

540字节(32位系统),或 1kb(双开64位操作系统

因此,如果您允许使用512MB(在64Bit上),您将设置524288作为值。

反之,您可以将将要设置的内存量乘以1024。

例子:

  512 * 1024 =   52488
 1024 * 1024 = 1048576 

它显示了当前使用的inotify-consumers的确切数量。所以你可能有更好的想法,你应该增加多少限制。

你可以修复它,增加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——系统

然后将其粘贴到您的终端,并按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的值。

验证最简单的方法,它是为我工作良好。

步骤1:停止服务器

第二步:手动删除' '下的'cache'文件夹。Angular的文件夹

步骤3:启动服务器

我试着增加建议的数量,但它没有工作。

我看到当我登录我的虚拟机时,它显示“需要重新启动”

我重新启动VM,它工作了

sudo重启