错误: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:没有这样的文件或目录”