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

Reh*_*tar 32 node.js nodemon graphql

我正在学习graphqlprisma-binding用于graphql操作。我在nodemon启动节点服务器时遇到了此错误,它为我提供了模式文件的路径,该文件由a自动生成graphql-cli。谁能告诉我这个错误是什么意思?

错误:

Internal watch failed: ENOSPC: System limit for number of file watchers reached, watch '/media/rehan-sattar/Development/All projects/GrpahQl/graph-ql-course/graphql-prisma/src/generated
Run Code Online (Sandbox Code Playgroud)

谢谢大家!!

Isa*_*ura 62

如果您使用的是Linux,则您的项目已达到系统文件查看器的限制

要解决此问题,请在您的终端上尝试:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

  • 当我们这样做时,还有什么我们必须知道的其他含义吗?我知道这有助于解决问题,我自己尝试过。但我有点怀疑这个修复可能会导致什么副作用。 (17认同)
  • 默认值(在 Ubuntu 21 上)是 65535,将其设置为该值的两倍 (131070) 为我解决了 Node JS 问题。因此,根据尽量减少副作用的原则,在一直达到 500k 之前,值得尝试较小的增量。 (7认同)
  • 如果您不确定有多少正在使用,我不建议将其增加太多。使用以下命令检查正在使用的编号 `find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs 猫 | grep -c '^inotify'` (6认同)
  • 使用 sysctl --system 重新加载更新的系统 (3认同)
  • 我发现了[有关其工作原理的更多信息](https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers)。 (2认同)

Jur*_*son 12

在我的Ubuntu计算机上使用VSCode时,有时会出现此问题。

就我而言,以下解决方法会有所帮助:

停止观察程序,关闭VScode,启动观察程序,再次打开VSCode。


小智 10

这是Linux内核中inotify (inode notification)的问题可以使用以下命令解决:

  1. 对于重新启动电脑之前的临时解决方案,请使用以下命令

    sudo sysctl -w fs.inotify.max_user_watches=100000
    
    Run Code Online (Sandbox Code Playgroud)
  2. 永久解决方案:要使其永久化,请添加名为/etc/sysctl.d/10-user-watches.conf的文件,其中包含以下内容:

    fs.inotify.max_user_watches = 10000
    
    Run Code Online (Sandbox Code Playgroud)

进行更改后,从 /etc 中的所有 sysctl 配置文件重新加载设置扩展名为.sudo sysctl -p


Cur*_*son 9

您需要增加系统用户的inotify观察者限制。您可以使用以下命令从命令行执行此操作:

sudo sysctl -w fs.inotify.max_user_watches=100000
Run Code Online (Sandbox Code Playgroud)

不过,该操作将一直持续到重新启动。要使其永久存在,请添加一个/etc/sysctl.d/10-user-watches.conf具有以下内容的文件:

fs.inotify.max_user_watches = 100000
Run Code Online (Sandbox Code Playgroud)

在进行以上(或任何其他)的改变后,你可以重新从所有sysctl的配置文件的设置/etcsudo sysctl -p

  • 使用 sysctl --system 重新加载更新的系统 (5认同)

Man*_*azo 8

为了测试更改,我临时设置了值为 524288 的参数。

sysctl -w fs.inotify.max_user_watches=524288
Run Code Online (Sandbox Code Playgroud)

然后我继续验证:

npm run serve
Run Code Online (Sandbox Code Playgroud)

问题解决了,为了让它永久化,你应该尝试在文件“/etc/sysctl.conf”中添加一行,然后重新启动sysctl服务:

cat /etc/sysctl.conf |tail -n 2
fs.inotify.max_user_watches=524288

sudo systemctl restart systemd-sysctl.service
Run Code Online (Sandbox Code Playgroud)


小智 5

我有同样的问题,但我的来自 webpack。谢天谢地,他们在他们的网站上提供了一个很好的解决方案:

对于某些系统,观看大量文件可能会导致大量 CPU 或内存使用。可以使用正则表达式排除像 node_modules 这样的大文件夹:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};
Run Code Online (Sandbox Code Playgroud)