2017-10-17 108 views
0

爲了壓力測試我正在構建的項目,我需要編寫一個嘗試消耗機器上所有可用RAM的節點腳本 - 允許我測試機器是否具有檢測並終止這種失控過程的工作。節點腳本消耗所有可用內存

我寫這個劇本:

let buffer = []; 

const MB = (bytes) => Math.round(bytes/1024/1024) + 'MB' 

const memoryUsage =() => { 
     const mem = process.memoryUsage(); 
     return MB(mem.rss) + '\t' + MB(mem.heapTotal) + '\t' + MB(mem.external); 
} 


setInterval(()=>{ 
    buffer.push(Buffer.alloc(1024 * 1024* 1024)); // Eat 1GB of RAM every second 
    console.log(buffer.length + '\t' + memoryUsage()); 
}, 1000); 

它試圖分配一個GB或RAM每一秒。

200秒,這是我的控制檯輸出:

196 28MB 7MB 200704MB 
197 28MB 7MB 201728MB 
198 28MB 7MB 202752MB 
199 28MB 7MB 203776MB 
200 28MB 7MB 204800MB 
201 28MB 7MB 205824MB 
202 28MB 7MB 206848MB 
203 28MB 7MB 207872MB 
204 28MB 7MB 208896MB 
205 28MB 7MB 209920MB 

這是HTOP的內存使用:

RAM usage

我的問題是:

  1. 在哪裏虛擬內存是否存在,如果它不在RAM或交換中?腳本如何分配245GB的Virt內存而不實際分配任何內容?
  2. 如何使腳本正常工作,並且實際分配內存以使機器停機?即如何增加HTOP的RES列中的數字?
  3. 我的意圖是運行用戶編寫和上傳的不可信的任意腳本 - 在這種情況下,失控的RAM使用情況是否真實?

這是在官方Nodejs 8 Docker容器中運行。

回答

0

使用內存。即使你認爲你已經分配了它,但在使用它之前可能並非如此。用零填充,隨機數或其他。