我有一个从mongodb获取数据并为其创建流的进程。我从DB获取记录,点击一些API,然后将结果存储回DB。由于数据库提取比API响应快得多,因此我在每40条记录之后暂停并恢复流。但是,过了一会儿,过程在中间停止,没有任何错误。当我看到日志时,一切似乎都很好但不确定为什么这个过程不会继续进行。我已经尝试在恢复前设置1秒的超时但到目前为止没有运气。此外,这个问题是零星的,有时它的工作非常好,但很多时候它只是暂停在中间。有没有更好的推荐方法来处理这种情况
var productStream = db.product.find(query).stream();
然后我像这样处理每个产品
productStream.on('data', function (product) {
//do some processing
})
我维护两个变量来跟踪流中的记录数和已处理记录的数量。当计数达到40时,我暂停流。
if (count == 40) {
console.log(totalCount, Date());
productStream.pause();
}
在此处理期间,我继续暂停和恢复流。这是我用来调用简历的函数
function checkResumeStream() {
if (count == 40 && processed_count >= count) {
count = 0;
processed_count = 0;
productStream.resume();
}
}
更新 现在,当我仔细检查日志以及top命令时,我可以看到,每当processed_count达到38时,日志几乎停止(当它达到40时它会恢复)。此外,当我检查top命令的结果时,我可以看到在此期间mongod的CPU使用率增加到100%。我有mongodb设置来记录db.system.profile中每个查询慢于100ms,但没有记录任何查询。所以我不明白mongod在哪里耗尽所有CPU?