如何使NodeJS使用分配的所有内存

时间:2017-08-21 08:57:08

标签: node.js memory memory-management

这是我第一次使用相当多的内存,我发现了一个奇怪的现象。

我正在阅读大小为43MB的excel文件并将其保存在数组中。我想我可能需要寻找一种方法来流向客户端,但我仍然很好奇。

我通过运行node excelParserTool.js --max-old-space-size=10000运行我的代码来为我的程序分配10GB内存。

以下是我的代码

let csvWriter = () => {
    let workbook = new Excel.Workbook();

    console.log(`before reading ${JSON.stringify(process.memoryUsage())}`);
    workbook.xlsx.readFile('myfile').then((err, data) => {
        console.log(`after reading ${JSON.stringify(process.memoryUsage())}`);

        workbook.eachSheet((worksheet, sheetId) => {
            let writeStream = fs.createWriteStream(`./sheet${sheetId}`);

            worksheet.eachRow({includeEmpty: true}, (row, rowNumber) => {
                let eachRow = '';

                row.eachCell({includeEmpty: true}, (cell, colNumber) => {

                    if(cell.value !== null && typeof cell.value === 'object'){
                        eachRow += JSON.stringify(cell.value) + ', ';
                    }else if(cell.value === null){
                        eachRow += ', ';
                    }else {
                        eachRow += cell.value + ', ';
                    }
                    console.log(`through each cycle ${JSON.stringify(process.memoryUsage())}`)
                });

                eachRow += '\n';
                writeStream.write(eachRow);
            });
            writeStream.end();
        })
    })
};

重点是,对于每行读取,我打印process.memoryUsage()以便我可以看到正在消耗多少内存。但是,当程序死亡时,Javascript heap out of memory表示最后的内存使用量为through each cycle {"rss":1549365248,"heapTotal":1509969920,"heapUsed":1479087128,"external":3724116}

使用的Heaptotal和堆只有大约1.5Gb,远低于我为该程序分配的内容。此外,当我看到我的计算机统计数据时,仍然可以使用超过7gbs。这是为什么?

1 个答案:

答案 0 :(得分:1)

您将内存标志设置在错误的位置

  

node [options] [-e script | script.js] [参数]

所以在你的情况下它应该是node --max-old-space-size=10000 excelParserTool.js