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


102

我正在学习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

这是linux ulimit错误,请参见此处stackoverflow.com/questions/34588/…–
Janith,

试过这个!再次收到相同的错误!
Rehan Sattar '18

2
您可能正在观看太多文件。也许它也包括nod_modules目录?
米克尔18'Dec

node_modules 至关重要,因为所有包装都在那里。我试图杀死服务器端口上运行的以前的进程,它对我有用,但我不知道现在要花多长时间:D
Rehan Sattar

Answers:


226

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

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

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

2
用于sysctl --system重新加载较新的系统
YLJ

6
执行此操作时,我们还必须知道其他含义吗?我知道这有助于解决问题,所以我自己尝试了一下。但是我有点怀疑此修复程序可能导致什么副作用。
奥尔迪

@Aldee这个变化我建议检查这个维基的技术含义:github.com/guard/listen/wiki/...
ISAC莫拉

这也解决了npm插件的许多问题。thx
The Bumpaster

3
如果您不确定正在使用多少,则不建议增加太多。检查以下使用的号码find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull

23

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

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

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


那就对了!因为VSCode。它应该是自动保存模式。
Hng Ng Vi

19

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

sudo sysctl -w fs.inotify.max_user_watches=100000

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

fs.inotify.max_user_watches = 100000

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


非常感谢!为我工作!但是我必须在哪里添加此文件?
Rehan Sattar

@RehanSattar创建一个文件/etc/sysctl.d/10-user-watches.conf,并放入其中fs.inotify.max_user_watches = 100000
cjs

出于完整性考虑,将其放在此处echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p
RedHatter

2
用于sysctl --system重新加载较新的系统
YLJ

4

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

sysctl -w fs.inotify.max_user_watches=524288

然后我继续验证:

npm run serve

并且问题已解决,为了使其永久存在,您应该尝试在文件“ /etc/sysctl.conf”中添加一行,然后重新启动sysctl服务:

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

sudo systemctl restart systemd-sysctl.service

这个暂时的测试提示是无价的。谢谢
intmarinoreturn0

1

很难知道要增加多少观察者。因此,这是一个使观察者数量增加一倍的实用程序:

function get_inode_watcher_count() {
  find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | 
  xargs cat | 
  grep -c '^inotify'
}

function set_inode_watchers() {
  sudo sysctl -w fs.inotify.max_user_watches="$1"
}

function double_inode_watchers() {
  watcher_count="$(get_inode_watcher_count)"
  set_inode_watchers "$((watcher_count * 2))"

  if test "$1" = "-p" || test "$1" = "--persist"; then
    echo "fs.inotify.max_user_watches = $((watcher_count * 2))" > /etc/sysctl.d/10-user-watches.conf
  fi
}

# Usage
double_inode_watchers
# to make the change persistent
double_inode_watchers --persist

0

我有同样的问题,但是我的来自webpack。幸运的是,他们在自己的网站上提供了一个不错的解决方案:

对于某些系统,观看许多文件可能会导致大量CPU或内存使用。使用正则表达式可以排除诸如node_modules之类的巨大文件夹:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.