节点脚本消耗所有可用内存

时间:2017-10-17 23:10:08

标签: node.js linux memory memory-management sysadmin

为了对我正在构建的项目进行压力测试,我需要编写一个Node脚本,尝试使用机器上所有可用的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使用情况:

RAM usage

我的问题是:

  1. 如果虚拟内存不在RAM或交换中,它在哪里?如何在不实际分配任何内容的情况下分配245GB的Virt内存?
  2. 如何使脚本正常工作,并实际分配RAM以使机器停机?即,如何增加HTOP RES栏中的数字?
  3. 我的目的是运行用户编写和上传的不受信任的任意脚本 - 在这种情况下,失控的RAM使用情况是否真实可以检查?
  4. 这是在官方Nodejs 8 Docker容器内运行的。

1 个答案:

答案 0 :(得分:0)

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