for (i = 0; i < 3e11; i++) {
process.stdout.write('aaaabbbbccccdddd')
process.stdout.write('\n')
}
或者这段代码:
for (i = 0; i < 3e11; i++) {
console.log('aaaabbbbccccdddd')
}
只需在终端中运行,如下所示:node test.js
大约一分钟后会产生以下结果:
<--- JS stacktrace --->
Cannot get stack trace in GC.
FATAL ERROR: MarkCompactCollector: semi-space copy, fallback in old gen Allocation failed - JavaScript heap out of memory
Aborted (core dumped)
它在哪里消耗内存?
$ node -v
v6.1.0
最佳答案
它被这个错误所覆盖:https://github.com/nodejs/node/issues/1741
它被认为是 Node.js 中的一个 Unresolved 错误。它似乎与 stdout
的异步属性有关,可以通过以下方式修复:
process.stdout._handle.setBlocking(true);
老实说,我很困惑,因为我知道 console.log
被阻塞了。这个问题可能比“阻塞”与“不阻塞”更微妙,我想它是阻塞地写入缓冲区,而缓冲区是非阻塞地写入输出,但不确定。 (认为这个答案不完整。)
关于node.js - 为什么在热循环中写入标准输出会导致内存不足关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085746/