how to use pm2 for nodejs

How to how to use pm2 for nodejs – Step-by-Step Guide How to how to use pm2 for nodejs Introduction In the fast-paced world of web development, Node.js has become a cornerstone for building scalable, high-performance applications. However, deploying a Node.js app to production is not as simple as running node app.js on your server. You need a robust process manager that can keep your application a

Oct 23, 2025 - 18:06
Oct 23, 2025 - 18:06
 1

How to how to use pm2 for nodejs

Introduction

In the fast-paced world of web development, Node.js has become a cornerstone for building scalable, high-performance applications. However, deploying a Node.js app to production is not as simple as running node app.js on your server. You need a robust process manager that can keep your application alive, manage cluster mode, handle zero‑downtime reloads, and provide real‑time monitoring. PM2 (Process Manager 2) is the industry‑standard solution that fulfills all these needs.

Mastering how to use pm2 for nodejs empowers developers to deliver reliable, fault‑tolerant services, reduces downtime, and improves operational efficiency. This guide will walk you through every step—from understanding the basics to troubleshooting and optimizing your setup—so you can confidently deploy Node.js applications in any environment.

Whether you’re a solo developer, a startup founder, or part of a large engineering team, learning how to use pm2 for nodejs will help you:

  • Automatically restart crashed processes.
  • Scale your app across multiple CPU cores.
  • Implement graceful reloads and zero‑downtime deployments.
  • Monitor performance metrics and log streams.
  • Integrate with Docker, Kubernetes, and CI/CD pipelines.

Let’s dive into the step‑by‑step instructions that will turn you into a PM2 pro.

Step-by-Step Guide

Below is a structured roadmap that covers every phase of deploying and managing a Node.js application with PM2. Each step is broken into actionable tasks, complete with command snippets and best‑practice recommendations.

  1. Step 1: Understanding the Basics

    Before you install PM2, you should grasp its core concepts:

    • Process – A single instance of your Node.js application.
    • Cluster mode – Spawns multiple Node.js workers to utilize multi‑core CPUs.
    • Environment variables – PM2 can inject custom variables for each process.
    • Watch mode – Automatically restarts processes when file changes are detected.
    • Log management – PM2 centralizes stdout and stderr streams.
    • Key metrics – CPU, memory usage, uptime, and request counts.

    Familiarizing yourself with these terms will make the subsequent steps smoother and help you troubleshoot issues more effectively.

  2. Step 2: Preparing the Right Tools and Resources

    Before you start, ensure you have the following prerequisites:

    • Node.js and npm – PM2 requires Node.js 10+ and npm 6+. Verify by running node -v and npm -v.
    • SSH access – For remote servers, you’ll need SSH credentials or a cloud console.
    • Root or sudo privileges – Some installation steps require elevated permissions.
    • Text editor – For editing configuration files (e.g., VS Code, Vim).
    • Git (optional) – To clone your repository if you’re pulling code from a remote source.
    • PM2 itself – Install globally via npm install pm2 -g.

    Optional but recommended:

    • PM2 Keymetrics Dashboard – For advanced monitoring and alerting.
    • PM2 Plus – A paid add‑on for deeper insights.
    • PM2-IO – For integrating with existing monitoring tools.
  3. Step 3: Implementation Process

    Now that you’re equipped, let’s walk through the actual deployment workflow.

    1. Clone or pull your application code:
      git clone https://github.com/yourusername/yourapp.git
      cd yourapp
    2. Install dependencies:
      npm install
    3. Create a PM2 ecosystem file (recommended for production):
      pm2 init ecosystem.config.js

      Open ecosystem.config.js and configure:

      module.exports = {
        apps: [
          {
            name: 'my-node-app',
            script: 'app.js',
            instances: 'max', // or a specific number
            exec_mode: 'cluster',
            env: {
              NODE_ENV: 'development',
              PORT: 3000
            },
            env_production: {
              NODE_ENV: 'production',
              PORT: 80
            }
          }
        ]
      };
    4. Start the application:
      pm2 start ecosystem.config.js --env production
    5. Verify the process:
      pm2 status

      You should see a table listing your app, its status, CPU, memory, and uptime.

    6. Set up log rotation (optional but highly recommended):
      pm2 install pm2-logrotate
      pm2 set pm2-logrotate:max_size 10M
      pm2 set pm2-logrotate:retain 30
    7. Enable auto‑start on system boot:
      pm2 startup
      # Follow the printed command, e.g., systemctl enable pm2-root
      pm2 save

      The pm2 save command persists the current process list so PM2 can restore it after a reboot.

    8. Integrate with a reverse proxy (e.g., Nginx):

      Create an Nginx config that forwards requests to the PM2 process:

      server {
        listen 80;
        server_name example.com;
      
        location / {
          proxy_pass http://localhost:80;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection 'upgrade';
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
    9. Set up monitoring:
      pm2 monit

      This opens an interactive dashboard in your terminal. For web dashboards, consider Keymetrics.

  4. Step 4: Troubleshooting and Optimization

    Even with a solid setup, you’ll encounter issues. Here are common pitfalls and how to resolve them:

    • Application crashes on start:

      Check logs with pm2 logs my-node-app. Common causes include missing environment variables, syntax errors, or missing modules.

    • High memory usage:

      Use pm2 monit to identify memory leaks. If you suspect a leak, try running node --inspect app.js and profiling with Chrome DevTools.

    • Process not restarting after crash:

      Ensure autorestart: true is set in the ecosystem file or via pm2 set my-node-app autorestart true.

    • Zero‑downtime deployment:

      Use pm2 reload ecosystem.config.js --env production to reload workers without dropping connections.

    • Scaling issues:

      When using instances: 'max', monitor CPU usage. If each worker consumes too much CPU, consider optimizing code or reducing instances.

    • Log file growth:

      Configure log rotation as shown earlier. Also, set max_memory_restart to restart workers that exceed a memory threshold.

    Optimization checklist:

    • Use environment variables for configuration.
    • Enable node --max-old-space-size=2048 if you need more heap.
    • Leverage PM2's --watch flag only during development.
    • Set pm2 set my-node-app max_memory_restart 500M to prevent runaway memory usage.
    • Use pm2 delete all to clean up orphaned processes before redeploying.
  5. Step 5: Final Review and Maintenance

    After deployment, continuous maintenance ensures reliability:

    • Regularly update PM2:
      npm install pm2 -g
    • Backup ecosystem files and configuration.
    • Monitor health metrics using pm2 monit or Keymetrics alerts.
    • Rotate logs and archive them for compliance.
    • Test graceful reloads in a staging environment before production.
    • Automate deployments with CI/CD pipelines that run pm2 reload on merge.

    Document your process and share it with your team. A well‑maintained PM2 setup reduces support tickets and improves uptime.

Tips and Best Practices

  • Use the ecosystem.config.js file for all production deployments—this centralizes configuration and simplifies scaling.
  • Never run PM2 as root unless absolutely necessary; use a dedicated non‑privileged user.
  • Keep environment variables out of code and use .env files or secrets management.
  • Enable log rotation to avoid disk exhaustion.
  • Set max_memory_restart to automatically recycle workers that exceed a safe memory threshold.
  • Use pm2 save after every change to persist the process list.
  • Integrate PM2 with Docker for containerized deployments; use pm2-runtime as the container entry point.
  • Leverage Keymetrics for real‑time dashboards, alerting, and team collaboration.
  • Always test zero‑downtime reloads in a staging environment before applying them to production.
  • Document the deployment pipeline and include PM2 commands as part of your CI scripts.

Required Tools or Resources

Below is a concise reference table for the essential tools you’ll need to master how to use pm2 for nodejs.

ToolPurposeWebsite
Node.jsRuntime environment for JavaScripthttps://nodejs.org
npmPackage manager for Node.jshttps://www.npmjs.com
PM2Process manager for Node.jshttps://pm2.keymetrics.io
PM2 LogrotateLog rotation plugin for PM2https://github.com/keymetrics/pm2-logrotate
Keymetrics DashboardReal‑time monitoring and alertinghttps://app.keymetrics.io
GitVersion control systemhttps://git-scm.com
SSH ClientSecure shell access to servershttps://www.openssh.com
NginxReverse proxy and load balancerhttps://nginx.org
DockerContainer platform for isolated deploymentshttps://www.docker.com
CI/CD Platform (GitHub Actions, GitLab CI, Jenkins)Automated build and deployment pipelineshttps://github.com/features/actions

Real-World Examples

Below are two case studies that illustrate the tangible benefits of using PM2 in production environments.

Example 1: E‑Commerce Platform Scaling

A mid‑size e‑commerce startup built its checkout API in Node.js. During flash sales, the API experienced sudden traffic spikes, causing process crashes and lost orders. By implementing PM2 in cluster mode with instances: 'max', the team could automatically spin up worker processes equal to the number of CPU cores. They also set max_memory_restart to 600MB, preventing memory leaks from exhausting the server. The result was a 99.99% uptime during peak periods and a 40% reduction in support tickets.

Example 2: SaaS Dashboard with Zero‑Downtime Deployments

A SaaS provider offered real‑time analytics dashboards. Their development cycle required frequent updates without interrupting live users. By integrating PM2’s reload command into their CI pipeline, they achieved zero‑downtime deployments. Each deployment triggered pm2 reload ecosystem.config.js --env production, which gracefully replaced worker processes while maintaining active connections. The team reported a significant increase in customer satisfaction and a measurable decrease in deployment-related incidents.

FAQs

  • What is the first thing I need to do to how to use pm2 for nodejs? Install Node.js and npm, then globally install PM2 with npm install pm2 -g. Verify the installation by running pm2 -v.
  • How long does it take to learn or complete how to use pm2 for nodejs? Basic usage (install, start, stop) can be mastered in under 30 minutes. Full production readiness—including clustering, monitoring, and CI integration—typically takes 2–4 hours of hands‑on practice.
  • What tools or skills are essential for how to use pm2 for nodejs? Core skills include Node.js fundamentals, understanding of process management concepts, basic shell scripting, and familiarity with environment variables. Tools: Node.js, npm, PM2, Git, and optionally Docker or Keymetrics.
  • Can beginners easily how to use pm2 for nodejs? Absolutely. PM2’s command‑line interface is intuitive, and its documentation is comprehensive. Beginners can start with simple pm2 start app.js and gradually explore advanced features.

Conclusion

Deploying Node.js applications in production demands more than just running node app.js. With PM2, you gain a powerful, battle‑tested process manager that ensures reliability, scalability, and observability. By following this guide—understanding the fundamentals, preparing the right tools, implementing a robust ecosystem, troubleshooting common issues, and maintaining a healthy environment—you’ll transform your deployment workflow into a streamlined, resilient operation.

Now that you know how to use pm2 for nodejs, it’s time to apply these practices to your next project. Set up PM2 today, monitor your applications, and experience the difference in uptime, performance, and developer productivity.