全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-14 10 分钟 ✍️ juanwangdev

进程管理与稳定性(PM2)

PM2 是 Node.js 生产环境必备的进程管理工具,核心能力包括进程守护、集群模式、日志管理、监控告警。

安装与启动

全局安装

Bash
npm install pm2 -g

启动应用

Bash
# 普通启动
pm2 start app.js

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

# 集群模式启动(负载均衡)
pm2 start app.js -i max

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

进程守护

自动重启配置

JavaScript
// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-app',
    script: './app.js',
    instances: 'max',
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
}

崩溃重启策略

Bash
# 延迟重启(防止频繁崩溃)
pm2 start app.js --restart-delay=3000

# 限制重启次数
pm2 start app.js --max-restarts=10

集群模式

多进程负载均衡

Bash
# 根据 CPU 核心数启动
pm2 start app.js -i max

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

# 0秒停机重载
pm2 reload all

集群配置文件

JavaScript
// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'cluster-app',
    script: 'app.js',
    instances: 4,
    exec_mode: 'cluster',
    merge_logs: true,
    log_date_format: 'YYYY-MM-DD HH:mm:ss Z'
  }]
}

日志管理

日志配置

Bash
# 指定日志文件
pm2 start app.js --log ./logs/app.log --error ./logs/error.log

# 合并日志
pm2 start app.js --merge-logs

# 日志时间格式
pm2 start app.js --log-date-format="YYYY-MM-DD HH:mm:ss"

日志轮转

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

# 配置轮转参数
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

日志查看

Bash
# 实时日志
pm2 logs

# 指定应用日志
pm2 logs my-app

# 查看最近100行
pm2 logs --lines 100

# 清空日志
pm2 flush

监控与告警

内置监控

Bash
# 监控面板
pm2 monit

# 查看进程状态
pm2 list
pm2 show my-app

# 查看资源占用
pm2 status

内存监控配置

JavaScript
// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    max_memory_restart: '500M',  // 内存超限自动重启
    node_args: '--max-old-space-size=4096'
  }]
}

PM2 Plus 集成

Bash
# 链接到 PM2 Plus
pm2 link <secret_key> <public_key>

# 自定义指标
const pmx = require('@pm2/io');
pmx.metric('custom_metric', () => {
  return someValue;
});

常用命令

命令说明
pm2 start启动应用
pm2 stop all停止所有应用
pm2 restart all重启所有应用
pm2 reload all0秒停机重载
pm2 delete all删除所有应用
pm2 list查看应用列表
pm2 monit监控面板
pm2 logs查看日志
pm2 startup生成开机启动脚本
pm2 save保存进程列表

开机自启动

Bash
# 生成启动脚本
pm2 startup

# 保存当前进程列表
pm2 save

# 恢复进程列表
pm2 resurrect

环境变量管理

JavaScript
// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 8080
    }
  }]
}
Bash
# 指定环境启动
pm2 start ecosystem.config.js --env production

注意:生产环境务必配置 max_memory_restart 防止内存泄漏导致服务崩溃。

要点总结

  • 使用集群模式充分利用多核 CPU,提升并发处理能力
  • 配置 autorestartmax_memory_restart 确保服务自动恢复
  • 使用 pm2 savepm2 startup 实现开机自启动
  • 日志轮转配置 pm2-logrotate 避免日志文件过大
  • 通过 pm2 monit 实时监控进程状态和资源占用

📝 发现内容有误?点击此处直接编辑

← 上一篇 内存泄漏检测与优化
下一篇 → 速率限制与防暴力破解
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库