达到文件观察者数量的系统限制[已解决]

达到文件观察者数量的系统限制[已解决]

System limit for number of file watchers reached [Solved]

当您的系统已达到正在监视的文件数量限制时,会出现错误“已达到文件监视程序数量的系统限制”。

要解决该错误,请增加系统上 inotify 观察者的限制。

已达到文件观察者数量的系统限制

Watchpack Error (watcher): Error: ENOSPC: System limit for number of file watchers reached, watch '/home/borislav/Documents/one/projects'

打开您的 shell 并运行以下命令之一,具体取决于您的操作系统发行版。

# for Debian, RedHat and other similar Linux distros echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p # for ArchLinux echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

增加 inotify 观察者的数量

您可以在此 Github 存储库中阅读有关增加 Linux 系统上 inotify 观察者数量的更多信息

在运行开发服务器或观看测试时,您已超出系统对正在观看的文件数的限制。

当使用 Nodemon、React.js、Angular、Jest、Webpack 或其他倾向于监视大量文件的类似包时,经常会发生这种情况。

解决错误的方法是增加inotify watchers的限制。

该命令fs.inotify.max_user_watches=524288用于增加系统上 inotify 观察者的数量。

但是,除非您将新数量的观察者写入文件,否则更改不会在重新启动之间持续存在。

您可以通过运行以下命令来检查当前数量:

cat /proc/sys/fs/inotify/max_user_watches

获取 inotify 观察者的数量

Ubuntu 20.04 中默认的 inotify 观察者数量是65535.

524288乘以65535_ 8如果您愿意,可以设置更保守的 inotify 观察者数量,并在必要时增加数量。

tee命令读取输入并将其写入标准输出和一个或多个文件。

# for Debian, RedHat and other similar Linux distros echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p # for ArchLinux echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

我们使用-a(append) 标志附加到文件而不是覆盖它。

如果您在系统上 cat /etc/sysctl.conf(Debian, RedHat) 或(ArchLinux) 文件,您将在末尾看到增加 inotify 观察者数量的行。 /etc/sysctl.d/40-max-user-watches.conf

sudo sysctl -p命令用于指示sysctl从文件中读取值/etc/sysctl.conf

如果您使用 ArchLinux,该sysctl --system命令的作用相同。

总的来说,命令:

  1. 增加观察者的数量inotify
  2. 将新数量写入文件。
  3. 指示sysctl读取更新的值。

您可以通过运行以下命令来查看更新的金额:

cat /proc/sys/fs/inotify/max_user_watches

进行更改后,您应该能够运行开发服务器或测试服务器。

设置更多的inotify观察者

如果错误仍然存​​在,请尝试设置更多的 inotify 观察者。

# for Debian, RedHat and other similar Linux distros echo fs.inotify.max_user_watches=655350 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p # for ArchLinux echo fs.inotify.max_user_watches=655350 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

在更新系统上的 inotify 观察者数量后,尝试重新启动 Nodemon、React、Angular 或 Jest 服务器。

如果您在使用 VSCode 观看文件时遇到错误,请尝试关闭并重新打开 VSCode 编辑器。

解决使用webpack时报错

如果您在使用 Webpack 时遇到错误,请尝试通过
文件中
node_modules设置属性来排除该文件夹被监视watchOptionswebpack.config.js

webpack.config.js
module.exports = { //... watchOptions: { ignored: /node_modules/, }, };

这会将文件夹排除node_modules在监视之外。

如果这些建议都没有帮助,请尝试删除node_modules目录并重新安装依赖项。

# 👇️ (macOS/Linux) delete node_modules and package-lock.json rm -rf node_modules rm -f package-lock.json rm -f yarn.lock # 👇️ (Windows) delete node_modules and package-lock.json rd /s /q "node_modules" del package-lock.json del -f yarn.lock # 👇️ clean npm cache npm cache clean --force # 👇️ install packages npm install # 👇️ restart your development server

node_modules删除目录并重新安装项目的依赖项后,重新启动开发服务器。