NodeJS流-内存不足

时间:2019-02-06 12:37:42

标签: javascript node.js stream out-of-memory

我正在尝试使用nodejs流,但在我看来遇到了一些奇怪的事情。

管道可写

const {
  Writable,
  Readable
} = require('stream');

const myWritable = new Writable({
  write(chunk, encoding, callback) {
    callback()
  },
});

const myReadable = new Readable({
  read() {
    this.push(Buffer.from([1, 2, 3, 4, 5, 6]))
  }
});

myReadable.pipe(myWritable);

此看似无害的代码会导致线性内存增加,并且10秒钟后,该过程将因内存不足错误而停止。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

尽管这段代码并不是很有意义,但我仍然不明白为什么它占用了如此多的内存。我认为,它应该只是从可读流中创建缓冲区,将其通过管道写入可写内容,然后将所有内容进行垃圾收集。

管道到文件

const {
  Readable
} = require('stream');

const myWritable = require('fs').createWriteStream('/dev/null')

const myReadable = new Readable({
  read() {
    this.push(Buffer.from([1, 2, 3, 4, 5, 6]))
  }
});

myReadable.pipe(myWritable);

在这种情况下,写入实际上使用了文件系统,该过程运行得很好,而没有显着占用内存。

那么,关于幕后发生的事情有什么想法吗?

0 个答案:

没有答案