port sharing fails in cluster mode
Open
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 43.3k
- Forks
- 2.7k
- PR merge metrics
- No merged PRs in 30d
Description
What's going wrong?
Cluster Mode fails to share the same port among all the instances of a script.
How could we reproduce this issue?
Create an HTTP server for NodeJS.
Make the server listen on port process.env.UWS_PORT.
Use the settings from my ecosystem.config.js below:
module.exports = {
apps: [
{
name: 'auth server',
script: './index.mjs',
instances: 'max',
exec_mode: 'cluster',
time: true,
combine_logs: true,
env: {
NODE_ENV: 'development',
REDIS_HOST: '127.0.0.1',
REDIS_PORT: '6379',
UWS_PORT: '9090',
},
watch: false,
},
],
};
Supporting information
$ pm2 report
--- PM2 report ----------------------------------------------------------------
Date : Sat Jan 16 2021 21:41:03 GMT+0100 (Central European Standard Time)
===============================================================================
--- Daemon -------------------------------------------------
pm2d version : 4.5.1
node version : 15.6.0
node path : /Users/dmitrymedvedev/.volta/bin/pm2
argv : /Users/dmitrymedvedev/.volta/tools/image/node/15.6.0/bin/node,/Users/dmitrymedvedev/.volta/tools/image/packages/pm2/lib/node_modules/pm2/lib/Daemon.js
argv0 : node
user : dmitrymedvedev
uid : 501
gid : 20
uptime : 52min
===============================================================================
--- CLI ----------------------------------------------------
local pm2 : 4.5.1
node version : 15.6.0
node path : /Users/dmitrymedvedev/.volta/bin/pm2
argv : /Users/dmitrymedvedev/.volta/tools/image/node/15.6.0/bin/node,/Users/dmitrymedvedev/.volta/tools/image/packages/pm2/bin/pm2,report
argv0 : node
user : dmitrymedvedev
uid : 501
gid : 20
===============================================================================
--- System info --------------------------------------------
arch : x64
platform : darwin
type : Darwin
cpus : Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
cpus nb : 12
freemem : 429232128
totalmem : 17179869184
home : /Users/dmitrymedvedev
===============================================================================
--- PM2 list -----------------------------------------------
┌─────┬────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 16 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 1 │ auth server │ default │ 0.0.0 │ cluster │ 1510 │ 113s │ 15 │ online │ 0.1% │ 39.7mb │ dmi… │ disabled │
│ 2 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 3 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 31 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 4 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 31 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 5 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 6 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 7 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 31 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 8 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 9 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 10 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
│ 11 │ auth server │ default │ 0.0.0 │ cluster │ 0 │ 0 │ 30 │ errored │ 0% │ 0b │ dmi… │ disabled │
└─────┴────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Current process list running is not in sync with saved list. Type 'pm2 save' to synchronize'
===============================================================================
--- Daemon logs --------------------------------------------
/Users/dmitrymedvedev/.pm2/pm2.log last 20 lines:
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:3 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:7 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:7] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:3] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:7] starting in -cluster mode-
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:7] online
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:10 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:10] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:8 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:8] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:4 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:4] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
PM2 | 2021-01-16T21:39:21: PM2 log: App name:auth server id:7 disconnected
PM2 | 2021-01-16T21:39:21: PM2 log: App [auth server:7] exited with code [0] via signal [SIGINT]
PM2 | 2021-01-16T21:39:21: PM2 log: Script /Users/dmitrymedvedev/Downloads/projects/feather/sources/back-end/servers/AuthServer/index.mjs had too many unstable restarts (16). Stopped. "errored"
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the failure with the provided ecosystem.config.js, Node.js HTTP server, and port 9090, then inspect the pm2 report and daemon logs for the cluster workers that repeatedly restart. Done means all configured cluster instances remain online and share the same port without unstable restarts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, node.js
- Domain
- devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100