In this article we want to increase Node.js application performance for handling heavy load traffic When we run Node.js application, we assign one cpu thread for that. With pm2 you can cluster Node.js application to run more than one thread instance. PM2 is a runtime process management and monitoring tool with a built-in load balancer for Node.js applications. you can install it as globally or locally but for production container base application you can install it in Dockerfile.

FROM node:16-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . /app

# Install bash
RUN apk add --no-cache bash

RUN npm install -g pm2
RUN npm run build

#CMD ["node", "dist/src/main.js"]
CMD ["pm2-runtime", "start", "ecosystem.config.js"]
EXPOSE 3000

After dockerize your application, you should add ecosystem.config.js file in root of project.

module.exports = {
  apps: [
    {
      name: `base-api-${process.env.NODE_ENV || 'env'}-worker`,
      script: './dist/src/main.js',
      instances: 1,
      exec_mode: 'cluster',
      autorestart: true,
    },
  ],

In ecosystem.config.js in script section you can put main initiate js file like main.js or app.js. Instance section is for define number of app instances. With pm2 start ecosystem.config.js we can run our clustering:)