I'm using pm2 to run my app on as many instances as there are cores on my machine. Running the following command works as expected:
pm2 start build/server.js --watch -i max
This starts up 16 instances:
michael@my-machine todo % pm2 list
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ server │ default │ 1.0.0 │ cluster │ 68303 │ 1s │ 0 │ online │ 73% │ 114.1mb │ michael │ enabled │
│ 1 │ server │ default │ 1.0.0 │ cluster │ 68304 │ 1s │ 0 │ online │ 68% │ 114.8mb │ michael │ enabled │
│ 2 │ server │ default │ 1.0.0 │ cluster │ 68305 │ 1s │ 0 │ online │ 63% │ 79.9mb │ michael │ enabled │
│ 3 │ server │ default │ 1.0.0 │ cluster │ 68308 │ 1s │ 0 │ online │ 58% │ 74.4mb │ michael │ enabled │
│ 4 │ server │ default │ 1.0.0 │ cluster │ 68311 │ 1s │ 0 │ online │ 54% │ 67.3mb │ michael │ enabled │
│ 5 │ server │ default │ 1.0.0 │ cluster │ 68314 │ 1s │ 0 │ online │ 49% │ 65.9mb │ michael │ enabled │
│ 6 │ server │ default │ 1.0.0 │ cluster │ 68317 │ 1s │ 0 │ online │ 47% │ 65.5mb │ michael │ enabled │
│ 7 │ server │ default │ 1.0.0 │ cluster │ 68320 │ 1s │ 0 │ online │ 45% │ 63.1mb │ michael │ enabled │
│ 8 │ server │ default │ 1.0.0 │ cluster │ 68321 │ 1s │ 0 │ online │ 42% │ 61.8mb │ michael │ enabled │
│ 9 │ server │ default │ 1.0.0 │ cluster │ 68324 │ 1s │ 0 │ online │ 39% │ 58.5mb │ michael │ enabled │
│ 10 │ server │ default │ 1.0.0 │ cluster │ 68325 │ 1s │ 0 │ online │ 37% │ 58.8mb │ michael │ enabled │
│ 11 │ server │ default │ 1.0.0 │ cluster │ 68326 │ 0s │ 0 │ online │ 35% │ 56.3mb │ michael │ enabled │
│ 12 │ server │ default │ 1.0.0 │ cluster │ 68329 │ 0s │ 0 │ online │ 0% │ 54.2mb │ michael │ enabled │
│ 13 │ server │ default │ 1.0.0 │ cluster │ 68332 │ 0s │ 0 │ online │ 0% │ 51.7mb │ michael │ enabled │
│ 14 │ server │ default │ 1.0.0 │ cluster │ 68335 │ 0s │ 0 │ online │ 0% │ 47.8mb │ michael │ enabled │
│ 15 │ server │ default │ 1.0.0 │ cluster │ 68343 │ 0s │ 0 │ online │ 0% │ 46.8mb │ michael │ enabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
However, when I try to do the same thing, using my ecosystem.config.js
file, I only see one instance:
[PM2] App [server_from_config] launched (1 instances)
┌─────┬───────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ server_from_config │ default │ 1.0.0 │ cluster │ 69680 │ 0s │ 0 │ online │ 0% │ 7.3mb │ michael │ enabled │
└─────┴───────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
My ecosystem.config.js
file:
module.exports = {
apps: [
{
name: 'server_from_config',
script: './build/server.js',
env_production: {
NODE_ENV: 'production',
watch: true,
instances: 'max',
exec_mode: 'cluster',
},
},
],
};
What's going on here?
Please remove env_production
and try
module.exports = {
apps: [
{
name: 'server_from_config',
script: './build/server.js',
NODE_ENV: 'production',
watch: true,
instances: 'max',
exec_mode: 'cluster',
env_production: {
NODE_ENV: 'production',
},
},
],
};