gpt4 book ai didi

javascript - 使用 NodeJS 遍历 mongo 数据流时内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 09:51:36 34 4
gpt4 key购买 nike

我正在从 mongodb 集合中流式传输数据,对手头的数据进行一些计算,然后将其存储回 mongo。该过程在前 50k 左右的记录中运行良好,然后就陷入困境。前 50k 条记录似乎每秒存储 2-3k 条记录,然后接近每秒 2 条。

var stream = Schema.find().stream();
stream.on('data', function (doc) {
pauseStream(this);
total++;
OtherSchema.find().exec(function(err,others) {
doc.total = others.data + doc.data;
doc.save(function(err) {
written++;
});
});
});

function pauseStream(stream) {
if((total > (written + 50)) && !timedout) {
timedout = true;
stream.pause();
setTimeout(function() {
timedout = false;
pauseStream(stream);
}, 100);
}
else {
stream.resume();
}
}

我试图将流量控制在一次只有 50 个未完成的更新,我已经上下更改了这个数字,在所有挂起的地方没有变化。我究竟做错了什么?似乎是某种内存泄漏。当我使用 memwatch 时,50k 的统计数据如下所示:

{ num_full_gc: 2368,al: 168610
num_inc_gc: 55680,
heap_compactions: 2368,
usage_trend: 4177.7,
estimated_base: 89033445,
current_base: 121087440,
min: 15957344,
max: 366396904 }

最佳答案

尝试设置一个 batchSize而不是自己暂停流。

var stream = Schema.find().batchSize(50).stream();

关于javascript - 使用 NodeJS 遍历 mongo 数据流时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27392679/

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