При использовании pm2 в режиме кластера работает только один процесс nodejs
Запускаю приложение nodejs менеджером pm2 в режиме кластера:
pm2 start /api/app.js --name api2 -i 4
Но нагрузка только в одном процессе, и логи тоже только с него:

Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Пишем тестовый сервер:
const express = require('express');
const app = express();
const rand = Math.random();
app.get('/', (req, res) => {
console.log(`ololo ${rand}`);
res.json({ok: rand});
});
app.listen(3002, 'localhost');
Запускаем его под pm2:
./node_modules/.bin/pm2 start src/express-under-pm2.js --name api2 -i 4
Проверяем:
┌─────┬─────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼─────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ api2 │ default │ 1.0.0 │ cluster │ 91541 │ 90s │ 0 │ online │ 0% │ 26.8mb │ kolpak │ disabled │
│ 1 │ api2 │ default │ 1.0.0 │ cluster │ 91542 │ 90s │ 0 │ online │ 0% │ 26.8mb │ kolpak │ disabled │
│ 2 │ api2 │ default │ 1.0.0 │ cluster │ 91543 │ 90s │ 0 │ online │ 0% │ 26.8mb │ kolpak │ disabled │
│ 3 │ api2 │ default │ 1.0.0 │ cluster │ 91544 │ 90s │ 0 │ online │ 0% │ 27.9mb │ kolpak │ disabled │
└─────┴─────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Делаем несколько запросов, чтобы убедиться, что ответы будут повторяться. Ответы должны повторяться так как в запущенном worker-е число в переменной rand не меняется:
username@negroponta-mac:~/tmp/q $ curl http://localhost:3002
{"ok":0.8181942417429142}
{"ok":0.15886834916651726}
{"ok":0.17382555685734502}
{"ok":0.5360435879520078}
{"ok":0.8181942417429142}
{"ok":0.15886834916651726}
{"ok":0.17382555685734502}
{"ok":0.5360435879520078}
{"ok":0.8181942417429142}
Наблюдаемый результат: ответы worker-ов повторяются.
Запускаем бесконечный цикл, который будет постоянно обращаться к серверу:
while true; do curl http://localhost:3002; done
Наблюдаем равномерную загрузку worker-ов:
username@negroponta-mac:~/tmp/q $ ./node_modules/.bin/pm2 monit
┌─ Process List ───────────────────────────────┐
│[ 0] api2 Mem: 39 MB CPU: 1 % onlin │
│[ 1] api2 Mem: 41 MB CPU: 1 % onlin │
│[ 2] api2 Mem: 39 MB CPU: 1 % onlin │
│[ 3] api2 Mem: 40 MB CPU: 2 % onlin │
username@negroponta-mac:~/tmp/q $ ./node_modules/.bin/pm2 log api2
0|api2 | ololo 0.15886834916651726
2|api2 | ololo 0.17382555685734502
3|api2 | ololo 0.5360435879520078
1|api2 | ololo 0.8181942417429142
0|api2 | ololo 0.15886834916651726
2|api2 | ololo 0.17382555685734502
3|api2 | ololo 0.5360435879520078
Вывод: вы правильно запустили своё приложение под pm2. Приложение запущенное в таком режиме будет равномерно загружать worker-ов.
