PM2管理Node.js多进程应用


PM2是Node.js应用的生产级进程管理器,提供进程守护、自动重启、集群模式、日志管理和性能监控等功能。在搬瓦工VPS上运行Node.js应用时,PM2是必不可少的工具。本文详细介绍PM2的安装配置和常用功能。

安装PM2

# 全局安装
npm install -g pm2

# 验证
pm2 -v

# 安装日志轮转模块
pm2 install pm2-logrotate

基本命令

# 启动应用
pm2 start app.js
pm2 start app.js --name myapp
pm2 start app.js --name myapp -- --port 3000

# 查看所有进程
pm2 list
pm2 status

# 停止/重启/删除
pm2 stop myapp
pm2 restart myapp
pm2 delete myapp

# 重载(零停机,集群模式下可用)
pm2 reload myapp

# 停止所有
pm2 stop all

# 删除所有
pm2 delete all

Ecosystem配置文件

通过配置文件管理多个应用,是PM2的推荐使用方式:

pm2 init simple

编辑生成的 ecosystem.config.js

module.exports = {
  apps: [
    {
      name: 'web-api',
      script: 'src/server.js',
      cwd: '/var/www/api',
      instances: 2,
      exec_mode: 'cluster',
      env: {
        NODE_ENV: 'production',
        PORT: 3000
      },
      max_memory_restart: '300M',
      exp_backoff_restart_delay: 100,
      watch: false,
      ignore_watch: ['node_modules', 'logs'],
      error_file: '/var/log/pm2/api-error.log',
      out_file: '/var/log/pm2/api-out.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
      merge_logs: true
    },
    {
      name: 'worker',
      script: 'src/worker.js',
      cwd: '/var/www/api',
      instances: 1,
      exec_mode: 'fork',
      cron_restart: '0 3 * * *',
      env: {
        NODE_ENV: 'production'
      }
    },
    {
      name: 'frontend',
      script: 'node_modules/.bin/next',
      args: 'start',
      cwd: '/var/www/frontend',
      env: {
        PORT: 3001
      }
    }
  ]
};
# 启动所有应用
pm2 start ecosystem.config.js

# 只启动指定应用
pm2 start ecosystem.config.js --only web-api

# 停止指定应用
pm2 stop ecosystem.config.js --only worker

集群模式

集群模式利用多CPU核心运行多个应用实例,实现负载均衡:

# 以集群模式启动(自动匹配CPU核心数)
pm2 start app.js -i max

# 指定实例数
pm2 start app.js -i 2

# 扩容/缩容(实时调整实例数)
pm2 scale myapp 4
pm2 scale myapp +2

集群模式支持零停机重载:

# reload会逐个重启实例,保证始终有实例在运行
pm2 reload myapp

# restart会同时重启所有实例(有短暂中断)
pm2 restart myapp
Tip: 搬瓦工VPS通常是1-2核CPU,集群模式实例数建议设为CPU核心数,不宜过多。

日志管理

# 查看所有应用日志
pm2 logs

# 查看指定应用日志
pm2 logs myapp

# 只看最近50行
pm2 logs myapp --lines 50

# 只看错误日志
pm2 logs myapp --err

# 清空日志
pm2 flush
pm2 flush myapp

配置日志轮转(安装pm2-logrotate后):

# 设置单个日志文件最大大小
pm2 set pm2-logrotate:max_size 10M

# 保留的日志文件数量
pm2 set pm2-logrotate:retain 7

# 压缩旧日志
pm2 set pm2-logrotate:compress true

# 轮转时间间隔
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'

# 查看当前配置
pm2 conf pm2-logrotate

监控

# 终端实时监控面板(CPU、内存、日志)
pm2 monit

# 查看详细信息
pm2 show myapp
pm2 describe myapp

# 查看进程指标
pm2 prettylist

开机自启

# 生成启动脚本(根据系统自动选择systemd/upstart等)
pm2 startup

# 执行命令输出的sudo命令,例如:
# sudo env PATH=$PATH:/home/user/.nvm/versions/node/v20.0.0/bin pm2 startup systemd -u user --hp /home/user

# 保存当前进程列表
pm2 save

# 之后每次系统重启,PM2会自动恢复保存的进程

# 取消开机自启
pm2 unstartup

环境变量切换

module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 8080
    },
    env_staging: {
      NODE_ENV: 'staging',
      PORT: 3001
    }
  }]
};
# 使用production环境启动
pm2 start ecosystem.config.js --env production

# 切换环境需要删除后重新启动
pm2 delete myapp
pm2 start ecosystem.config.js --env staging

常用技巧

# 文件变化时自动重启(开发环境)
pm2 start app.js --watch

# 定时重启(每天凌晨3点)
pm2 start app.js --cron-restart="0 3 * * *"

# 内存超限自动重启
pm2 start app.js --max-memory-restart 300M

# 延迟重启(指数退避)
pm2 start app.js --exp-backoff-restart-delay=100

# 运行npm脚本
pm2 start npm -- start
pm2 start npm --name myapp -- run serve

# 运行Python脚本
pm2 start app.py --interpreter python3

# 导出/导入进程列表
pm2 save
pm2 resurrect
Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程