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

时间:2018-12-26 09:50:42

标签: node.js graphql nodemon

我正在学习graphql,并将prisma-binding用于graphql操作。启动节点服务器时,我遇到此nodemon错误,它为我提供了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

谢谢大家!

8 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:5)

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

对于我来说,以下解决方法会有所帮助:

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

答案 2 :(得分:3)

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

sudo sysctl -w fs.inotify.max_user_watches=100000

这将一直持续到重启。要使其永久存在,请添加一个名为/etc/sysctl.d/10-user-watches.conf的文件,其内容如下:

fs.inotify.max_user_watches = 100000

答案 3 :(得分:3)

我遇到了同样的问题,但我的问题来自 webpack。谢天谢地,他们找到了一个很好的解决方案on their site

<块引用>

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

webpack.config.js

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

答案 4 :(得分:1)

为了测试更改,我暂时将参数设置为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

答案 5 :(得分: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

答案 6 :(得分:0)

就我而言,当我在 Linux 服务器中执行 nodemon 命令时。我打开了我的 VSCode(通过 SSH 连接到服务器)。因此,基于@Juri Sinitson 的回答,我只需关闭 VSCode 并再次运行 nodemon 命令。它有效。

我的 nodemon 命令: nodemon server.js 通过 npm start

答案 7 :(得分:-1)

在Linux上,我实际上使用sudo运行。 sudo npm start