Как узел обрабатывает `--max-old-space-size` в отношении разветвленных процессов? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь отладить некоторые проблемы с памятью с помощью Node.js, в частности пытаюсь передать суммы, выделяемые серверу узла, а также двум дочерним процессам. Я не могу найти официальную документацию о том, как эти флаги будут выделять память.

У меня есть родительский процесс, который я вызываю

node --max-old-space-size=512 parent.js -child-1-memory=512 -child-2-memory=2048

Мое намерение состоит в том, чтобы запустить эти процессы с известным максимумом для каждого процесса.

Внутри parent.js:

// Child 1, intended value 512
const child1 = fork('child1.js', [], { 
    execArgv: ['--max-old-space-size=' + getArgValue('-child-1-memory')],
    env: { ... },
});

// Child 2, intended value 2048
const child2 = fork('child2.js', [], { 
    execArgv: ['--max-old-space-size=' + getArgValue('-child-2-memory')],
    env: { ... },
});

В настоящее время у меня есть установка, в которой максимальный уровень дочернего элемента 2 составляет 1500M, поэтому я попытаюсь запустить этот процесс с 2048M. Я могу видеть процесс, выполняющийся ps -e | grep "child2.js" с аргументом /usr/local/bin/node /path/to/child2.js --max_old_space_size=2048, но, похоже, это не вступает в силу.

Я пытался

node --max-old-space-size=3072 parent.js -child-1-memory=512 -child-2-memory=2048

в случае, если дети извлекают из пула родительского процесса, но на самом деле это не имеет смысла, так как я могу использовать 1500M, прежде чем это OOM.

Я попытался переключить аргументы для разветвления, указав

const child1 = fork('child1.js', ['--max-old-space-size=' + getArgValue('-child-1-memory')], { 
    execArgv: [],
    env: { ... },
});

Но, похоже, это не имеет значения.

Некоторые заметки:

  • Запуск Child 2 независимо от родительского процесса с помощью --max-old-space-size=2048 работает просто отлично.
  • Текущая настройка prod работает на узле v8.9.1, я также протестировал v11.9.0 с теми же результатами.
  • На самом деле не нужно судить о том, сколько памяти должен использовать процесс узла.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...