【发布时间】: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 或交换中,它在哪里?脚本如何在不实际分配任何内容的情况下分配 245GB 的 Virt 内存?
- 如何使脚本工作,并实际分配 RAM 以使机器停机?即,如何增加 HTOP 的 RES 列中的数字?
- 我的目的是运行用户编写和上传的不受信任的任意脚本 - 在这种情况下,RAM 使用失控是否是一个需要检查的现实场景?
这是在官方的 Nodejs 8 Docker 容器中运行的。
【问题讨论】:
标签: node.js linux memory memory-management sysadmin