0
私が構築しているプロジェクトをストレステストするために、マシン上の使用可能なRAMをすべて消費しようとするNodeスクリプトを書く必要があります。そのような暴走プロセスを検出して終了させる場所。ノード使用可能なすべてのメモリを消費するスクリプト
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ギガバイトを割り当てるか、毎秒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
そして、これはホテルトップでRAMの使用量である:
私の質問は以下のとおりです。
- 仮想メモリがRAMまたはスワップにない場合は、その仮想メモリは存続しますか?スクリプトは実際に何かを割り当てずに245GBのVirtメモリをどのように割り当てることができますか?
- スクリプトを動作させるにはどうしたらいいですか?実際にRAMを割り当ててマシンを停止させますか?つまり、HTOPのRES列の数値をどのように増やすことができますか?
- 私は、信頼できない任意のスクリプトをユーザーが書き込んだりアップロードしたりすることを意図しています。この場合、暴走RAMの使用は現実的なシナリオですか?
これは、公式のNodejs 8 Dockerコンテナ内で実行されています。