2017-08-21 89 views
0

這是我第一次使用相當多內存的項目,並觀察到一個奇怪的現象。如何讓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以上可用。爲什麼是這樣?

回答

1

你在錯誤的地方設置內存標誌

節點[選項] [-e腳本|的script.js] [參數]

所以應該node --max-old-space-size=10000 excelParserTool.js你的情況

+0

哈哈你是對的...我很愚蠢 – forJ