nar*_*uen 5 node.js windows-10
我使用node.js(win10 + linux mount)
每次在node.js编译时(或在comp大约3分钟后)都会出现错误。
错误:ENOENT:没有这样的文件或目录,uv_resident_set_memory
node.js进程之后的消息很难被杀死(bash killall无法正常工作,因此我通过Windows任务管理器杀死了节点进程)
有什么问题?我找不到来自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)
Run Code Online (Sandbox Code Playgroud)
这个bug有很多层。首先,您正在 Windows Linux Subsystem 1.x 容器中运行。WSL 1.x 容器都缺少/proc. 中丢失的“文件”/proc并不是真正丢失的文件,而是实际上 Linux 内核如何公开获取进程信息的句柄。
其次,node.js 构建于libuv之上,当调用/proc/self/stat内置的 Node 方法时,它依赖于获取有关当前内存使用情况(RSS)的一些信息。process.memoryUsage
相关调用的libuv源码:
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);
Run Code Online (Sandbox Code Playgroud)
最后,yarn尝试执行process.memoryUsage()以监视构建期间的内存使用情况并将其报告给 CLI。不幸的是,由于/proc/self/statWSL 1.x 中缺少该条目之一,libuv 无法找到该“文件”,并且进程崩溃并显示此相对模糊的错误消息。
好的一面是,我刚刚检查了一个使用 WSL 2.0 作为 docker 后端运行 Debian 的 docker 容器,看来 WSL 现在正确地公开了/proc/self/stat. 只是为了确认我在该容器中运行了节点并且执行process.memoryUsage()不再导致崩溃。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |