错误:ENOENT:没有这样的文件或目录,uv_resident_set_memory

Posted

技术标签:

【中文标题】错误:ENOENT:没有这样的文件或目录,uv_resident_set_memory【英文标题】:Error: ENOENT: no such file or directory, uv_resident_set_memory 【发布时间】:2019-03-09 08:20:56 【问题描述】:

我使用 node.js (win10 + linux mount)

每次 node.js 编译时(或编译后大约 3 分钟之前)都会出现错误。

node.js进程后消息难杀(bashkillall不行,所以我通过Windows任务管理器杀了node进程)

有什么问题?我无法从 Google 中找到任何答案。

internal/process.js:103
    memoryUsage_(memValues);
    ^

Error: ENOENT: no such file or directory, uv_resident_set_memory
    at process.memoryUsage (internal/process.js:103:5)
    at ConsoleReporter.checkPeakMemory (/home/naruen/.nvm/versions/node/v8.11.3/lib/node_modules/yarn/lib/cli.js:34148:40)
    at Timeout._onTimeout (/home/naruen/.nvm/versions/node/v8.11.3/lib/node_modules/yarn/lib/cli.js:34141:13)
    at ontimeout (timers.js:498:11)
    at Timer.unrefdHandle (timers.js:611:5)

【问题讨论】:

有人知道这个吗?我的 ubuntu 服务器也有同样的问题 【参考方案1】:

这个错误有很多层。首先是您在 Windows Linux Subsystem 1.x 容器中运行的事实。 WSL 1.x 容器都缺少/proc 中的一些条目。 /proc 中丢失的“文件”并不是真正丢失的文件,而实际上只是 linux 内核如何公开句柄以获取进程信息。

其次,node.js 建立在libuv 之上,它依赖于/proc/self/stat,以便在调用内置节点方法process.memoryUsage 时获取有关当前内存使用情况(RSS)的一些信息。

libuv source 用于相关电话:

int uv_resident_set_memory(size_t* rss) 
  char buf[1024];
  const char* s;
  ssize_t n;
  long val;
  int fd;
  int i;

  do
    fd = open("/proc/self/stat", O_RDONLY);
  while (fd == -1 && errno == EINTR);

最后,yarn 正在尝试执行 process.memoryUsage() 以监控构建期间的内存使用情况并将其报告给 CLI。不幸的是,由于 /proc/self/stat 是 WSL 1.x 中缺少的条目之一,libuv 无法找到“文件”,并且进程崩溃并显示此相对模糊的错误消息。

从好的方面来说,我刚刚检查了一个使用 WSL 2.0 作为 docker 后端运行 Debian 的 docker 容器,现在看来 WSL 正确地公开了 /proc/self/stat。只是为了确认我在该容器中运行了节点并执行 process.memoryUsage() 不再导致崩溃。

【讨论】:

以上是关于错误:ENOENT:没有这样的文件或目录,uv_resident_set_memory的主要内容,如果未能解决你的问题,请参考以下文章

proxyquire 错误:ENOENT:没有这样的文件或目录,scandir

错误:ENOENT:没有这样的文件或目录,在进行 Yarn 安装时使用 lstat

ENOENT:没有这样的文件或目录。?

反应本机调试器:“错误:ENOENT:没有这样的文件或目录”

错误:ENOENT:没有这样的文件或目录,打开 './views/s.ejs' Nodejs Express

node.js - 错误:ENOENT:没有这样的文件或目录,取消链接