這是我第一次使用相當多內存的項目,並觀察到一個奇怪的現象。如何讓NodeJS使用所有分配的內存
我正在閱讀一個大小爲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以上可用。爲什麼是這樣?
哈哈你是對的...我很愚蠢 – forJ