2017-10-17 107 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

使用内存。即使你认为你已经分配了它,但在使用它之前可能并非如此。用零填充,随机数或其他。