gpt4 book ai didi

node.js - 为什么在热循环中写入标准输出会导致内存不足关闭?

转载 作者:太空宇宙 更新时间:2023-11-03 23:04:44 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com