进程管理与稳定性(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 all | 0秒停机重载 |
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,提升并发处理能力
- 配置
autorestart和max_memory_restart确保服务自动恢复 - 使用
pm2 save和pm2 startup实现开机自启动 - 日志轮转配置
pm2-logrotate避免日志文件过大 - 通过
pm2 monit实时监控进程状态和资源占用
📝 发现内容有误?点击此处直接编辑