javascript - Node.js: "process run out of memory"

标签 javascript node.js mongodb

我有以下代码导致错误: fatal error :CALL_AND_RETRY_LAST 分配失败 - 进程内存不足

无论我是否设置--max_old_space_size=4096(或更大的数字)都没有任何区别。我的电脑有 16 GB RAM。

系统:win10/node.js 6.9.2/mongodb 3.4

我在“chatModel”中有超过 16 000 000 条消息。对于较少量的消息,代码可以工作。

您对如何解决问题/优化代码有什么建议吗?

function sortOutMessages(){

var atSymbol = "@";
var rgx = new RegExp("^\\" +atSymbol);


chatModel.find({messageContent: rgx}, function (err, doc){

    var docs = doc;
    var docsLength = docs.length;

    for (var i =0; i<docsLength;i++) {
        var directedMessagesObj = new directedMessagesModel
        ({
            timeStamp: docs[i].timeStamp,
            channelName: docs[i].channelName,
            userName: docs[i].userName,
            userID: docs[i].userID,
            messageContent: docs[i].messageContent,
            messageLength: docs[i].messageLength,
            subscriber: docs[i].subscriber,
            turbo: docs[i].turbo,
            moderator: docs[i].moderator
        });

        directedMessagesObj.save({upsert:true}, function (err) {
            var fs = require('fs');
            if (err) {
                    fs.appendFile("undefinedLog.txt", "error at " + new Date().toLocaleString() + " directedMessagesObj.save " + "\r\n")
                    loggerWinston.warn("error at " + new Date().toLocaleString() + " directedMessagesObj.save " + "\r\n");
                    return console.log(err);
            }

        });
    }

});



}

最佳答案

您正在使用此代码创建 docs.length 数量的新 Promise。您应该做的是限制可以运行的 Promise 数量。

由于您一直在尝试编写同步代码,因此我建议在上一个 dbSave 的回调中调用下一个 dbSave。

如果您想要一个并行系统,我会创建一个简单的信号量系统。

关于javascript - Node.js: "process run out of memory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346530/

相关文章:

javascript - 谷歌地图故障 : Closures & Passing By Reference

javascript - 如何使用 CamanJS 更改图像?

javascript - 两个 Javascript 函数一个 window.onload = Custom.init;和一个 window.onload = function() {

javascript - 检查第一个字符是否是数字 - Discord.js

javascript - 如何正确链接调用 $.show() 和 $.toggleClass() 来触发 CSS3 动画

node.js - 完成 Mongo 写入后 Node csv 调用挂起

javascript - 在node.js中使用fetch时出现403禁止错误

javascript - MongoDB,如何创建一个空集合?

sql - mongo中的外键?

collections - MongoDB - 如何从集合中查询嵌入文档