【问题标题】:Nodemon 错误:已达到文件观察者数量的系统限制
【发布时间】:2019-05-24 14:42:43
【问题描述】:

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

【问题讨论】:

  • 这是 linux ulimit 错误,请参阅此处stackoverflow.com/questions/34588/…
  • 试过这个!再次遇到同样的错误!
  • 您可能正在观看太多文件。也许它也包括 nod_modules 目录?
  • node_modules 是必不可少的,因为所有的包都在那里。我试图杀死以前在我的服务器端口上运行的进程,它对我有用,但我不知道现在需要多长时间:D

标签: node.js graphql nodemon


【解决方案1】:

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

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

【讨论】:

  • 也为我工作。我基本上打开了两个 VSCode。关闭前一个解决了这个问题。
【解决方案2】:

我遇到了同样的问题,但是我的问题来自 webpack。值得庆幸的是,他们提供了一个很好的解决方案on their site

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

webpack.config.js

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

【讨论】:

    【解决方案3】:

    很难知道观察者的数量增加了多少。所以,这里有一个实用程序可以将观察者的数量翻倍:

    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
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 这个暂时的测试提示是无价的。谢谢
      【解决方案5】:

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

      sudo sysctl -w fs.inotify.max_user_watches=100000
      

      不过,这只会持续到您重新启动。要使其永久化,请添加一个名为 /etc/sysctl.d/10-user-watches.conf 的文件,其内容如下:

      fs.inotify.max_user_watches = 100000
      

      进行上述(或任何其他)更改后,您可以使用sudo sysctl -p 重新加载/etc 中所有sysctl 配置文件中的设置。

      【讨论】:

      • 非常感谢!为我工作!!但是我必须在哪里添加这个文件?
      • @RehanSattar 创建一个文件/etc/sysctl.d/10-user-watches.conf 并在其中放入fs.inotify.max_user_watches = 100000
      • 为了完整起见将其放在这里echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p
      • 使用 sysctl --system 重新加载更新的系统
      【解决方案6】:

      如果您使用的是 Linux,您的项目将达到系统的文件观察器限制

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

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

      【讨论】:

      • 使用 sysctl --system 重新加载更新的系统
      • 在执行此操作时是否还有其他我们必须知道的含义?我知道这有助于解决问题,我自己尝试过。但我有点怀疑此修复可能导致的副作用。
      • @Aldee 关于此更改的技术含义我建议查看此 wiki:github.com/guard/listen/wiki/…
      • 这也解决了许多 npm 插件的问题。谢谢
      • 如果您不确定正在使用的数量,我不建议您增加太多。用下面的find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'查看正在使用的号码
      【解决方案7】:

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

      【讨论】:

      • 这通常会起作用,因为 root 通常比普通用户具有更高的 inotify 监视限制,但是当他们不以 root 身份运行时,以 root 身份运行是一个非常的坏主意需要。请参阅my answer to this question 了解如何更改用户限制。
      【解决方案8】:

      在我的 Ubuntu 机器上使用 VSCode 时,我有时会遇到这个问题。

      在我的情况下,以下解决方法会有所帮助:

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

      【讨论】:

      • 没错!因为 VSCode。它应该是自动保存模式。
      • 这对我有用;使用 ember-cli 开发
      • 由于我的焦点框会间歇性地发生这种情况,并且 VSCode 重新启动是修复 w/out 摆弄 w/max-_user_watches。 (注意:当它工作时,我通常会看到使用的观察者远低于 7k)
      猜你喜欢
      • 2022-08-12
      • 2020-11-18
      • 2022-01-22
      • 2019-09-09
      • 2020-09-24
      • 2021-03-25
      • 2019-06-29
      • 2020-10-08
      • 2021-04-07
      相关资源
      最近更新 更多