Linux 下的 PM2 完整指南
PM2 是 Node.js 应用的专业级进程管理器,专为生产环境设计,提供应用守护、集群管理、日志监控等核心功能。
🔰 核心特性
- 应用守护:崩溃时自动重启
- 零秒重载:热更新应用不停机 (
pm2 reload
) - 负载均衡:通过集群模式利用多核 CPU
- 日志管理:集中收集 stdout/stderr 日志
- 监控仪表盘:实时查看 CPU/内存/请求状态
📥 安装与更新
# 通过 NPM 安装
npm install pm2@latest -g# 更新到最新版本
pm2 update# 验证安装
pm2 --version # 输出 v5.3.0+
🔧 核心命令手册
1. 进程生命周期管理
命令 | 作用 | 示例 |
---|---|---|
pm2 start | 启动应用 | pm2 start app.js --name "API" |
pm2 stop | 停止应用 | pm2 stop 0 (ID)或 pm2 stop all |
pm2 restart | 硬重启 | pm2 restart api (应用名) |
pm2 reload | 软重载(不停机) | pm2 reload cluster-app |
pm2 delete | 移除进程 | pm2 delete 1 或 pm2 delete all |
2. 集群模式(负载均衡)
# 启动 4 个实例(自动负载均衡)
pm2 start app.js -i 4 --name "worker-cluster"# 根据 CPU 核心数启动
pm2 start app.js -i max # 为每个核心启动一个进程# 动态扩容缩容
pm2 scale api +2 # 增加 2 个实例
pm2 scale worker 2 # 固定到 2 个实例
3. 监控与日志
命令 | 作用 |
---|---|
pm2 status | 查看进程状态表 |
pm2 monit | 打开实时监控仪表盘 |
pm2 logs | 显示所有日志 |
pm2 logs api --err | 仅显示错误日志 |
pm2 flush | 清空历史日志 |
pm2 startup | 创建系统服务(开机自启) |
4. 配置文件(关键)
通过 ecosystem.config.js
管理复杂配置:
module.exports = {apps: [{name: "prod-api",script: "./src/server.js",instances: 4, // 集群实例数exec_mode: "cluster", // 集群模式env: {NODE_ENV: "production",PORT: 8080},error_file: "/var/log/api.err.log",out_file: "/var/log/api.out.log",max_memory_restart: "1G" // 内存超限自动重启}, {name: "dev-worker",script: "./jobs/worker.js",watch: true // 文件改动自动重启}]
};
使用配置启动:pm2 start ecosystem.config.js
⚙️ 高级运维操作
环境变量隔离
# 针对不同环境启动
pm2 start app.js --env production
pm2 start app.js --env staging
ecosystem.config.js
中配置 env_production
和 env_staging
区分
健康检查
开启 HTTP 健康检查端点:
{name: "health-api",script: "server.js",http: "http://localhost:8080/health", // 健康检查 URLmax_restarts: 3, // 3 次失败后停止restart_delay: 5000 // 检查间隔 5 秒
}
定时重启(内存泄漏防御)
# 每天 UTC 时间 04:30 重启
pm2 restart api --cron "30 4 * * *"
🚨 故障排除
问题 | 诊断命令 |
---|---|
应用反复崩溃 | pm2 logs --lines 1000 |
CPU 占用过高 | pm2 monit + pm2 describe <id> |
端口冲突 | pm2 list 查端口 + lsof -i :8080 |
启动失败 | NODE_ENV=development pm2 start app.js --no-daemon |
文件描述符耗尽 | `pm2 describe |
📊 可视化监控
# 启用 Web 控制台(需 pm2 plus 账号)
pm2 plus # 注册/登录
pm2 link # 连接实例到云端# 本地网页仪表盘(端口 9615)
pm2 serve # 访问 http://localhost:9615
⚠️ 安全提醒
-
不使用 root 运行:
# 创建专用用户 sudo useradd -m -s /bin/bash pmuser sudo -u pmuser pm2 start app.js
-
防火墙限制:
sudo ufw allow from 192.168.1.0/24 to any port 8080 # 仅内网访问
-
日志权限加固:
chmod 600 /var/log/pm2/*.log
通过 PM2,你可以将 Node.js 应用的 可用性提升 99.95%+。更多命令参考官方文档:PM2 Runtime Documentation