Skip to content

PM2 进程管理实战

一句话概述:集群模式、负载均衡、日志管理、零停机重启——生产环境 Node.js 应用的必备工具

什么是 PM2?

定义:PM2 是 Node.js 应用的生产级进程管理器,提供负载均衡、自动重启、日志管理等功能。

涉及场景

  • 生产部署:守护进程、自动重启
  • 集群模式:多核 CPU 利用
  • 监控运维:CPU/内存监控、日志聚合
  • 零停机部署:reload 不中断服务

作用

  1. 提高应用可用性
  2. 充分利用服务器资源
  3. 简化运维操作

一、基础使用

安装与启动

bash
# 安装
npm install -g pm2

# 启动应用
pm2 start app.js
pm2 start app.js --name my-app

# 查看状态
pm2 list
pm2 status

常用命令

bash
pm2 start app.js      # 启动
pm2 stop app-name     # 停止
pm2 restart app-name  # 重启
pm2 delete app-name   # 删除
pm2 logs app-name     # 查看日志
pm2 monit             # 监控

二、集群模式

cluster_mode 原理

bash
# 启动集群模式(max = CPU 核心数)
pm2 start app.js -i max

# 配置文件
module.exports = {
  apps: [{
    script: 'app.js',
    instances: 'max',
    exec_mode: 'cluster'
  }]
};

原理:使用 Node.js cluster 模块,自动负载均衡。

配置文件

javascript
// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'api',
    script: './app.js',
    instances: 4,
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production'
    }
  }]
};

三、进程管理

自动重启

bash
# watch 模式
pm2 start app.js --watch

# max_restarts
pm2 start app.js --max-restarts 10

# min_uptime
pm2 start app.js --min-uptime 1000

零停机重启

reload vs restart

bash
# restart: 停止 → 启动(有停机时间)
pm2 restart app

# reload: 逐个重启进程(零停机)
pm2 reload app

实现原理

  1. 启动新进程
  2. 新进程就绪后,向旧进程发送 SIGINT
  3. 旧进程优雅关闭
  4. 重复直到所有进程更新

四、日志管理

日志输出

bash
# 默认路径
~/.pm2/logs/

# 实时日志
pm2 logs

# 清空日志
pm2 flush

日志聚合

bash
# 安装日志轮转
pm2 install pm2-logrotate

# 配置
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

五、监控与运维

内置监控

bash
pm2 monit  # 实时监控 CPU/内存
pm2 describe app-name  # 详细信息

PM2 Plus

云端监控平台,提供:

  • 实时监控
  • 异常告警
  • 性能分析

面试高频题

1. PM2 的集群模式如何工作?

使用 Node.js cluster 模块,fork 多个工作进程,主进程负责负载均衡。

2. reload 和 restart 的区别?

  • restart: 停止所有进程再启动(有停机)
  • reload: 逐个重启进程(零停机)

3. PM2 如何实现零停机部署?

通过 reload 命令,逐个替换进程,确保始终有进程在运行。

4. PM2 的负载均衡策略是什么?

使用 Node.js cluster 的 round-robin(轮询)策略。

5. 如何配置 PM2 开机自启动?

bash
pm2 startup
pm2 save