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:
Mes questions sont les suivantes:
- 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?
- 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?
- 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.