PM2 是 Node.js 生态里用得最多的进程管理工具,不只是后台运行,还有负载均衡、日志管理、监控告警、自动重启这些生产级功能。这篇记录 PM2 的核心用法、集群模式配置、Keymetrics 监控接入,以及生产环境的一些经验。
PM2 核心功能概览
1 | ┌─────────────────────────────────────────────────────────────────────┐ |
安装与基础命令
全局安装
1 | npm install -g pm2 |
核心命令速查表
| 命令 | 作用 |
|---|---|
pm2 start app.js |
启动应用 |
pm2 start app.js -i 4 |
启动 4 个集群实例 |
pm2 start app.js --name api |
指定进程名称 |
pm2 list |
查看所有进程状态 |
pm2 monit |
打开实时监控面板 |
pm2 logs |
查看所有进程日志 |
pm2 stop all |
停止所有进程 |
pm2 restart all |
重启所有进程 |
pm2 reload all |
0 秒停机重载(集群模式) |
pm2 delete all |
删除所有进程 |
pm2 startup |
生成开机启动脚本 |
pm2 save |
保存当前进程列表 |
进程启动方式
基础启动
1 | # 启动单个实例 |
集群模式启动
1 | # 根据 CPU 核心数启动最大进程数 |
| 模式 | 参数 | 适用场景 |
|---|---|---|
| Cluster | -i max / -i N |
HTTP 服务,需要多核利用 |
| Fork | -x |
后台任务、定时脚本 |
使用配置文件启动
创建 ecosystem.config.js:
1 | module.exports = { |
启动:
1 | pm2 start ecosystem.config.js |
集群模式详解
为什么使用集群模式
Node.js 是单线程的,默认只能利用一个 CPU 核心。通过 PM2 的集群模式,可以在同一台服务器上运行多个 Node.js 进程,充分利用多核 CPU:
1 | ┌─────────────────────────────────────────────────────────────────────┐ |
集群模式通信
1 | // server.js |
0 秒停机重载
1 | # 普通重启:先停后启,有短暂服务中断 |
| 命令 | 过程 | 影响 |
|---|---|---|
restart |
先全部停止,再全部启动 | 有短暂中断 |
reload |
逐个替换工作进程 | 无停机,推荐生产使用 |
日志管理
日志配置
1 | # 查看实时日志(所有进程) |
pm2-logrotate 配置
1 | # 安装日志轮转模块 |
Keymetrics 云端监控
注册与连接
Keymetrics 是 PM2 官方提供的云端监控平台,提供可视化的性能监控和异常告警。
1 | # 1. 在 https://app.keymetrics.io 注册账号并创建 bucket |
Docker 方式使用 Keymetrics
1 | docker run -p 80:80 \ |
端口要求
| 端口 | 协议 | 用途 |
|---|---|---|
| 80 | TCP | 推送指标协议 |
| 43554 | TCP | 反向交互协议(远程控制) |
监控面板功能
1 | ┌─────────────────────────────────────────────────────────────────────┐ |
开机自启配置
生成启动脚本
1 | # 根据当前系统自动生成启动脚本 |
保存进程列表
1 | # 保存当前运行的进程列表 |
验证开机自启
1 | # 查看 systemd 服务状态 |
生产环境最佳实践
1. 使用 ecosystem 配置文件
将所有配置集中管理,避免命令行参数混乱:
1 | // ecosystem.config.js |
2. 配合 Nginx 反向代理
1 | upstream nodejs { |
3. 健康检查端点
1 | // 在应用中实现健康检查 |
总结
PM2 生产部署的一些经验:
- 集群模式:用
-i max或-i N启动多个工作进程,充分利用多核 CPU - 配置文件:用
ecosystem.config.js管理配置,方便版本控制和团队协作 - 日志管理:装
pm2-logrotate模块做日志自动轮转,防止磁盘占满 - 监控告警:接入 Keymetrics 做云端监控,及时发现异常
- 开机自启:执行
pm2 startup和pm2 save确保服务随系统启动 - 优雅重启:生产环境用
pm2 reload实现 0 秒停机更新
合理的 PM2 配置能让 Node.js 应用在生产环境中稳定、高效地运行。