node.js - 错误 : EMFILE: too many open files, watch ,除非我使用 sudo

标签 node.js watch ulimit

描述
最近我遇到了一个问题。我无法运行 yarn startelement-web目录,我得到这些 errors .本来以为跟element-web有关所以我创建了一个 issue .一段时间后,我尝试运行 wintersmith preview bibviz 目录并得到相同的错误。这很奇怪,所以我尝试创建一个 Angular 项目并运行 ng serve并再次出错。我前往该问题以关闭它,因为它不是 element-web问题。我发现还有一个issue用同样的问题创建。已经被 turt2live 关闭了说 it looks like you've run out of memory on your system .基于此,我尝试关闭在后台运行的大多数程序,现在所有命令都可以运行。
我确定 ng serve过去用来工作。
我的 PC 有 16 GB 的 RAM,当我使用 7/16 GB 时,命令已经失败。运行命令时我看不到任何内存峰值。使用 sudo 运行命令也彻底解决了这个问题。这对我来说没有任何意义。
研究引导我到 ulimits但它们似乎没有效果。我也安装了watchman没有效果。
有人可以告诉我我缺少什么吗?
先感谢您!
信息
我在 Debian 11 Bullseye 上。这是一些可能有用的命令的输出。
作为普通用户:

> uname -a
Linux Simon-s-PC 5.8.0-3-amd64 #1 SMP Debian 5.8.14-1 (2020-10-10) x86_64 GNU/Linux
> sudo sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 524288
> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       46482
-n: file descriptors                8192
-l: locked-in-memory size (kbytes)  unlimited
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 63664
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 95
-N 15:                              unlimited
> yarn --version
1.22.5
sudo su :
> sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 524288
> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       63664
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  2043392
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 63664
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

最佳答案

我想我已经找到了解决方案:

  • /etc/sysctl.conf 中设置限制通过添加:
  • fs.inotify.max_user_watches=524288
    fs.inotify.max_user_instances=512
    
  • 打开一个新的终端或重新加载 sysctl.conf变量与
    sudo sysctl --system
    
  • 运行 yarn start

  • 现在一切正常,希望如此。如果它不起作用,请尝试将限制设置得更高。

    关于node.js - 错误 : EMFILE: too many open files, watch ,除非我使用 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64919108/

    相关文章:

    javascript - 函数调用 Node.js 库中其他函数的问题

    node.js - 寻找一个在作业仍在运行时不会启动的 Node.js 调度程序

    php - 监控目录然后运行PHP脚本

    javascript - angularJS 中的 $watch 未按预期工作

    centos - 创建沙发底座时出现 Docker 错误 - ulimit : open files: cannot modify limit: Operation not permitted

    Debian 挤压和设置 ulimit

    linux - 限制进程组的CPU时间

    node.js - 将日期保存到 Firebase Firestore Node.js

    node.js - 如何在 Linux 上为单个用户安装 node.js 模块(没有 root 权限)?

    swift 3 : Watch app: if watch goes to sleep there's a delay between interface controllers