Search code examples
pm2

pm2 doesn't start as many instances as possible when using config file


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?


Solution

  • 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',
                },
            },
        ],
    };