2017-10-17 14 views
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 usage

私の質問は以下のとおりです。

  1. 仮想メモリがRAMまたはスワップにない場合は、その仮想メモリは存続しますか?スクリプトは実際に何かを割り当てずに245GBのVirtメモリをどのように割り当てることができますか?
  2. スクリプトを動作させるにはどうしたらいいですか?実際にRAMを割り当ててマシンを停止させますか?つまり、HTOPのRES列の数値をどのように増やすことができますか?
  3. 私は、信頼できない任意のスクリプトをユーザーが書き込んだりアップロードしたりすることを意図しています。この場合、暴走RAMの使用は現実的なシナリオですか?

これは、公式のNodejs 8 Dockerコンテナ内で実行されています。

答えて

0

メモリを使用します。あなたがそれを割り当てたと思っても、それを使用するまではそうでないかもしれません。ゼロ、乱数などで埋めてください。

関連する問題