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或交换中?脚本如何分配245GB的Virt内存而不实际分配任何内容?
- 如何使脚本正常工作,并且实际分配内存以使机器停机?即如何增加HTOP的RES列中的数字?
- 我的意图是运行用户编写和上传的不可信的任意脚本 - 在这种情况下,失控的RAM使用情况是否真实?
这是在官方Nodejs 8 Docker容器中运行。