【问题标题】:Node Script to consume all available memory消耗所有可用内存的节点脚本
【发布时间】:2017-10-17 23:10:08
【问题描述】:

为了对我正在构建的项目进行压力测试,我需要编写一个 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);

每秒尝试分配 1 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 使用失控是否是一个需要检查的现实场景?

这是在官方的 Nodejs 8 Docker 容器中运行的。

【问题讨论】:

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


    【解决方案1】:

    使用内存。即使你认为你已经分配了它,但在你使用它之前可能并非如此。用零、随机数或其他填充它。如果你不使用内存,智能编译器或解释器总是有跳过分配的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2011-02-18
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2018-03-21
      相关资源
      最近更新 更多