React Native错误:ENOSPC:达到文件监视程序数量的系统限制

时间:2019-04-19 14:30:17

标签: react-native watchman

我已经设置了一个新的空白react native应用。

在安装了几个节点模块后,出现此错误。

enter image description here

我知道这与看守人没有足够的空间来监视所有文件更改有关。

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

是否应该通过将node_modules文件夹添加到.watchmanconfig来忽略它?

16 个答案:

答案 0 :(得分:8)

删除反应node_modules

rm -r node_modules

yarn or npm install

yarn start or npm start

如果发生错误,请再次使用此方法

答案 1 :(得分:7)

我通过使用sudo解决了这个问题 即

sudo yarn start

sudo npm start

答案 2 :(得分:6)

您可以对其进行修复,以增加查看警报的人数。

如果您对技术细节不感兴趣,而只想听工作:

  • 如果您正在运行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

如果此限制不足以监视目录中的所有文件,则必须增加该限制以使“侦听”正常工作。

您可以使用以下方法临时设置新的限制:

$ 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

如果听众不断抱怨,您可能还需要注意max_queued_eventsmax_user_instances的值。

答案 3 :(得分:3)

您可以尝试编辑

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

cat /proc/sys/fs/inotify/max_user_watches

fs.inotify.max_user_watches=524288

答案 4 :(得分:3)

在基于Debian的发行版上开发的节点应用程序发生在我身上。首先,一个简单的重新启动解决了它,但是在另一个应用程序上又发生了

由于inotify用来监视文件并查找目录中的更改的监视者的数量与之相关,因此您必须设置一个更大的数目作为限制:

我能够从here发布的答案中解决 (感谢他!)

所以,我跑了:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

详细了解https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details上发生的事情

希望有帮助!

答案 5 :(得分:2)

迟到的答案,已经有很多好的答案了。

如果你想要一个简单的脚本来检查最大文件监视是否足够大,如果没有,增加限制,这里是:

#!/usr/bin/env bash

let current_watches=`sysctl -n fs.inotify.max_user_watches`

if (( current_watches < 80000 ))
then
  echo "Current max_user_watches ${current_watches} is less than 80000."
else
  echo "Current max_user_watches ${current_watches} is already equal to or greater than 80000."
  exit 0
fi

if sudo sysctl -w fs.inotify.max_user_watches=80000 && sudo sysctl -p && echo fs.inotify.max_user_watches=80000 | sudo tee /etc/sysctl.d/10-user-watches.conf
then
  echo "max_user_watches changed to 80000."
else
  echo "Could not change max_user_watches."
  exit 1
fi

脚本将限制增加到 80000,但您可以随意设置您想要的限制。

答案 6 :(得分:1)

此错误的意思是系统监视的文件数量已达到限制!

结果:命令执行失败!或发出警告(例如执行本机启动vsocde)

解决方案:

修改系统监视文件的数量

Ubuntu

  1.   

    sudo gedit /etc/sysctl.conf

在底部添加一行

  1.   

    fs.inotify.max_user_watches = 524288   然后保存并退出!

执行

  1.   

    sudo sysctl -p   检查

那就解决了!

答案 7 :(得分:1)

来自official document

“ Visual Studio Code无法监视此大型工作空间中的文件更改”(错误ENOSPC)

当您看到此通知时,表明VS Code文件监视程序用尽了句柄,因为工作空间很大并且包含许多文件。可以通过运行以下命令查看当前限制:

cat /proc/sys/fs/inotify/max_user_watches

可以通过编辑将限制增加到最大

  

/etc/sysctl.conf

并将此行添加到文件末尾:

  

fs.inotify.max_user_watches = 524288

然后可以通过运行

来加载新值
  

sudo sysctl -p

请注意,Arch Linux的工作方式略有不同,有关详细信息,请参见增加inotify观察程序。

虽然524,288是可以观看的最大文件数,但是如果您在特别受内存限制的环境中,则可能希望减少文件数。每个文件监视占用540字节(32位)或〜1kB(64位),因此假设所有524,288个监视都被消耗,则上限约为256MB(32位)或512MB(64位) )。

  

另一个选择

用于使用files.watcherExclude设置从VS Code文件监视程序中排除特定的工作区目录。 files.watcherExclude的默认值不包括node_modules和.git下的某些文件夹,但是您可以添加不希望VS Code跟踪的其他目录。

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

答案 8 :(得分:1)

正如@snishalaka指出的那样,您可以增加inotify观察者的数量。

但是,我认为默认数字足够高,只有在未正确清理进程的情况下才能达到默认数字。因此,我只是按照related github issue上的建议重新启动了计算机,错误消息消失了。

答案 9 :(得分:1)

请参考此链接[1]。 Visual Studio代码已提到此错误消息的简短说明。我也遇到了同样的错误。在相关文件中添加以下参数将解决此问题。

 fs.inotify.max_user_watches=524288

[1] https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

答案 10 :(得分:0)

我在 linuxmint 发行版上遇到了此问题。当我在应用程序的/ public文件夹中添加了如此多的文件夹和子文件夹/文件时,似乎发生了这种情况。 我应用了此修复程序,效果很好...

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf

将目录更改为/ etc文件夹: cd /etc

然后运行: sudo systcl -p

您可能必须关闭终端,然后再次npm start才能使其正常工作。

如果失败,我建议在全局安装react-scripts并直接运行您的应用程序。

$ npm i -g --save react-scripts

然后运行npm start而不是react-scripts start来运行您的应用程序。

答案 11 :(得分:0)

如果您正在Docker中运行项目,则应在主机中执行echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf和所有其他命令,因为容器将自动继承该设置(并且直接在其内部进行将不起作用)。

答案 12 :(得分:0)

另一个简单而好的解决方案是将其添加到 jest 配置中:

watchPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/.git/"]

这会忽略指定的目录以减少被扫描的文件

答案 13 :(得分:0)

虽然几乎每个人都建议增加观察者的数量,但我不能同意这是一个解决方案。 就我而言,我想完全禁用观察者,因为在 CI 上运行的测试使用 vui-cli 插件,该插件为每个测试启动 web-pack-dev 服务器。

问题是:当几个构建同时运行时,它们会因为达到观察者限制而失败。

首先,我尝试将以下内容添加到 vue.config.js

module.exports = {
  devServer: {
    hot: false,
    liveReload: false
  }
}

参考:https://github.com/vuejs/vue-cli/issues/4368#issuecomment-515532738

而且它在本地工作,但在 CI 上不起作用(显然第二天它也因某些模棱两可的原因在本地停止工作)。

在调查了 web-pack-dev 服务器文档后,我发现了这一点: https://webpack.js.org/configuration/watch/#watch

然后这个: https://github.com/vuejs/vue-cli/issues/2725#issuecomment-646777425

长话短说这最终解决了问题:

vue.config.js

module.exports = {
publicPath: process.env.PUBLIC_PATH,
devServer: {
    watchOptions: {
        ignored: process.env.CI ? "./": null,
  },
}

}

Vue 版本 2.6.14

答案 14 :(得分:0)

记住这个问题是重复的:在original question看到这个答案

解决我的问题的一个简单方法是:

npm cache clear 

今天的最佳做法是

npm cache verify 

npm 或由它控制的进程正在监视太多文件。在构建节点上更新 max_user_watches 可以永远修复它。对于 debian,请在终端上输入以下内容:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

如果您想知道如何Increase the amount of inotify watchers 只需点击链接即可。

答案 15 :(得分:-1)

  1. 首先,您可以使用root特权每次运行

    sudo npm start

  2. 或者您可以删除 node_modules 文件夹并使用npm install重新安装

  3. 否则您将获得永久解决方案

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p