我已经设置了一个新的空白反应本机应用程序。
在安装了几个节点模块后,我得到了这个错误。
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 ?
来自官方文件:
“Visual Studio Code无法监视此大工作区中的文件更改”(错误ENOSPC)
当你看到这个通知时,它表明VS Code文件监视器正在用完句柄,因为工作区很大,包含很多文件。可以通过运行以下命令查看当前限制:
猫/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位)的上限。
另一个选择
是排除特定的工作空间目录从VS Code文件监视器的文件。watcherExclude设置。文件的默认值。watcherExclude排除了node_modules和.git下的一些文件夹,但是你可以添加其他你不想让VS Code跟踪的目录。
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/*/**": true
}
你可以修复它,增加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的值。
我在linuxmint发行版上遇到了这个问题。当我在应用程序的/public文件夹中添加了很多文件夹和子文件夹/文件时,似乎就发生了这种情况。
我应用了这个修复,它工作得很好…
$ echo fs.inotify。Max_user_watches =524288 | sudo tee -a /etc/sysctl.conf . a
更改目录到/etc文件夹:
cd /等
然后运行这个:
Sudo systcl -p
你可能需要关闭你的终端,重新启动npm才能让它工作。
如果失败了,我建议全局安装react-scripts并直接运行你的应用程序。
$ NPM I -g保存反应脚本
然后不是NPM start run,而是脚本开始运行你的应用程序。
我在基于Debian的发行版上开发一个节点应用程序时就遇到了这种情况。首先,一个简单的重启就解决了问题,但在另一个应用程序上又发生了这种情况。
因为它与inotify用来监视文件和查找目录更改的监视器数量有关,所以你必须设置一个更高的数字作为limit:
我可以从这里发布的答案中解决它
(感谢他!)
所以,我跑了:
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
希望能有所帮助!
虽然几乎每个人都建议增加观看人数,但我不同意这是一个解决方案。
在我的情况下,我想完全禁用watcher,因为测试运行在CI上使用vi -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版本
简单的解决方案
我发现,之前的解决方案在我的情况下很有效。我删除了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的确切数量。所以你可能有更好的想法,你应该增加多少限制。
设置fs.inotify. conf后,使用sysctl -p方式。Max_user_watches对我来说不起作用(顺便说一下,这个设置已经设置为一个很高的值,可能是我在不久前尝试修复这个问题时使用的,使用上面通常推荐的解决方法)。
我在这里发现的问题的最佳解决方案,下面我分享了解决它的执行步骤-在我的情况下,问题是在运行visual studio代码时发现的,但在其他情况下解决问题应该是一样的,比如你的:
Use this script to identify which processes are requiring the most file watchers in your session.
You can then query the current max_user_watches value with sysctl fs.inotify.{max_queued_events,max_user_instances,max_user_watches} and then set it to a different value (a lower value may do it)
sudo sysctl -w fs.inotify.max_user_watches=16384
Or you can simply kill the process you found in (1) that consumes the most file watchers (in my case, baloo_file)
The above, however, will likely need to be done again when restarting the system - the process we identified as responsible for taking much of the file watchers will (in my case - baloo_file) - will again so the same in the next boot. So to permanently fix the issue - either disable or remove this service/package. I disabled it: balooctl disable.
现在运行sudo code——user-data-dir,这次它应该以管理员权限打开vscode。(顺便说一下,当它不运行sudo代码——user-data-dir——verbose来查看问题是什么——这就是我如何计算出它与文件观察者限制有关)。
更新:
你可以像这里描述的那样配置VS代码文件监视排除模式。这可能是最终的解决方案,我只是不确定你总是事先知道哪些文件你不感兴趣看。
根本原因
上面的大多数回答都在谈论提高限制,而不是消除根本原因,这通常只是冗余监视的问题,通常是针对node_modules中的文件。
Webpack
答案在webpack 5文档中:
watchOptions:{被忽略:/node_modules/}
只需在这里阅读:https://webpack.js.org/configuration/watch/#watchoptionsignored
文档甚至提到这是一个“提示”,引用如下:
如果观察对你不起作用,试试这个方法。这可能会有所帮助
NFS和VirtualBox、WSL、容器或机器中的问题
码头工人。在这些情况下,使用轮询间隔并忽略large
文件夹,如/node_modules/,以保持CPU的使用最小化。
VS代码
VS Code或任何代码编辑器也会创建大量的文件监视。默认情况下,其中许多是完全多余的。更多信息请点击:https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc