Ответ 1
Первая ссылка - с июля 2014 года и использовалась как рекомендуемый способ сделать что-то. Однако динамики Heroku довольно ориентированы на память, и при использовании максимального количества ядер на процессор (как следует из первой статьи) очень легко превысить выделенное количество памяти.
Вместо этого новая рекомендация - профилировать ваше приложение и выяснить, сколько памяти требуется для каждого процесса. Задайте для этого значения переменную среды WEB_MEMORY
, а затем обновите код кластера следующим образом:
var cluster = require('cluster');
var numWorkers = process.env.WEB_CONCURRENCY;
if(cluster.isMaster) {
// Master process: fork our child processes
for (var i = 0; i < numWorkers; i++) {
cluster.fork();
}
// Respawn any child processes that die
cluster.on('exit', function() {
cluster.fork();
});
} else {
// Child process, put app initialisation code here.
}
Используя переменную WEB_MEMORY
, Heroku может генерировать значение WEB_CONCURRENCY
в зависимости от размера выполняемого вами динамометра и, следовательно, форсировать правильное количество процессов, чтобы убедиться, что ваше приложение не превышает допустимый объем памяти.
В стороне, если вы превысите выделение памяти (512 МБ на дино для 1x дино), для избытка будет использовано место подкачки. Это замедлит ваше приложение, увеличив время запроса и, как правило, вносит вклад в медлительность. Если вы превысите объем памяти слишком много (примерно в три раза больше распределения), Heroku перезапустит ваш dyno.