Node Script для использования всей доступной памяти

Чтобы провести стресс-тестирование проекта, который я создаю, мне нужно написать сценарий 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);

Который пытается выделить один ГБ или ОЗУ каждую секунду.

Через 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:

Использование оперативной памяти

Мои вопросы:

  1. Где живет виртуальная память, если она не в ОЗУ или подкачке? Как скрипт может выделить 245 ГБ вирт-памяти, фактически ничего не выделив?
  2. Как мне заставить скрипт работать и выделить оперативную память, чтобы вывести машину из строя? т. е. как я могу увеличить числа в столбце RES HTOP?
  3. Мое намерение состоит в том, чтобы запускать ненадежные, произвольные сценарии, написанные и загруженные пользователями. Является ли неконтролируемое использование оперативной памяти реалистичным сценарием для проверки в этом случае?

Это работает внутри официального контейнера Nodejs 8 Docker.


person Varun    schedule 17.10.2017    source источник


Ответы (1)


Используйте память. Даже если вы думаете, что выделили его, это может быть не так, пока вы его не используете. Заполните его нулями, случайными числами или чем-то еще. Если вы не используете память, всегда есть риск, что умный компилятор или интерпретатор пропустит выделение.

person klutt    schedule 17.10.2017