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

标签 node.js operating-system out-of-memory stdout

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/

相关文章:

operating-system - 用于开发机器的 Vista 或 XP

java - Apache ActiveMQ 中的内存泄漏

c - 方法执行时 QEMU 崩溃

java - 在哪里增加堆大小 - jboss 还是 java?

java - 从 JVM 内的内存不足异常中恢复,并在可能的情况下重置 JVM

node.js - 我的 Meteor 应用程序出现服务器错误?

javascript - 在 Node.js 中管道化 setTimeout

angularjs - 使用VS2015设置 Angular 2

node.js - 使用 Axios/Sharp 下载图像并调整图像大小

multithreading - Windows XP中每个线程时间片需要多长时间?