2017-10-17 36 views
0

Pour tester un projet que je construis, je dois écrire un script Node qui essaie de consommer toute la RAM disponible sur la machine - ce qui me permet de tester si les mécanismes que j'ai dans endroit pour détecter et mettre fin à de tels processus processus d'emballement.Node Script pour consommer toute la mémoire disponible

j'ai écrit ce script:

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); 

qui tente d'allouer un Go ou RAM à chaque seconde.

200 secondes, ceci est ma sortie de la console:

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 

Et ceci est l'utilisation de la RAM dans htop:

RAM usage

Mes questions sont les suivantes:

  1. Où est-ce que la mémoire virtuelle est active si elle n'est pas dans la RAM ou le swap? Comment le script peut-il allouer 245Go de mémoire Virt sans réellement allouer quoi que ce soit?
  2. Comment puis-je faire fonctionner le script, et allouer réellement la RAM pour faire baisser la machine? c'est-à-dire, comment puis-je augmenter les nombres dans la colonne RES de HTOP?
  3. Mon intention est d'exécuter des scripts arbitraires non approuvés écrits et téléchargés par les utilisateurs - L'utilisation de la RAM est-elle un scénario réaliste à vérifier dans ce cas?

Ceci est exécuté dans le conteneur officiel Nodejs 8 Docker.

Répondre

0

Utilisez la mémoire. Même si vous pensez l'avoir alloué, il se peut que ce ne soit pas le cas jusqu'à ce que vous l'utilisiez. Remplissez-le avec des zéros, des nombres aléatoires ou quoi que ce soit.