PM2 进程管理实战
一句话概述:集群模式、负载均衡、日志管理、零停机重启——生产环境 Node.js 应用的必备工具
什么是 PM2?
定义:PM2 是 Node.js 应用的生产级进程管理器,提供负载均衡、自动重启、日志管理等功能。
涉及场景:
- 生产部署:守护进程、自动重启
- 集群模式:多核 CPU 利用
- 监控运维:CPU/内存监控、日志聚合
- 零停机部署:reload 不中断服务
作用:
- 提高应用可用性
- 充分利用服务器资源
- 简化运维操作
一、基础使用
安装与启动
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实现原理
- 启动新进程
- 新进程就绪后,向旧进程发送 SIGINT
- 旧进程优雅关闭
- 重复直到所有进程更新
四、日志管理
日志输出
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