github.com · Unitech/pm2
pm2 - 开源琅嬛阁
项目介绍
PM2(Process Manager 2)是面向 Node.js 与 Bun 应用的生产级进程管理器,自 2013 年起广泛用于线上部署。它把应用以守护进程方式常驻运行,崩溃后自动拉起,并提供集群模式在多核机器上负载均衡 HTTP/TCP/UDP 流量。配合 pm2 reload 可实现零停机热更新,同时覆盖日志聚合、开机自启脚本生成、Docker pm2-runtime 集成等常见运维任务,支持 Linux、macOS 与 Windows。
核心特性
- 一键守护启动:
pm2 start app.js将应用后台化,持续监控并在异常退出时自动重启 - 集群与负载均衡:
pm2 start api.js -i max按 CPU 核数启动多实例,显著提升多核吞吐与容错能力 - 零停机热重载:
pm2 reload all滚动更新进程,避免发布时中断在线请求 - 日志与监控:
pm2 logs、pm2 monit集中查看输出;可安装pm2-logrotate做日志轮转 - 开机自启:
pm2 startup+pm2 save生成 systemd、launchd 等 init 脚本,重启后自动恢复进程列表 - 容器友好:
pm2-runtime作为node的 drop-in 替代,适合 Docker 镜像中以前台方式运行 Node 应用
对用户价值
手写 nohup node app.js & 难以应对崩溃重启、滚动发布与多实例调度;裸跑 node cluster 又缺少统一的管理界面与日志入口。PM2 把「启动—监控—重启—扩缩—发布」收敛到一套 CLI,让个人 VPS 与小团队也能获得接近 PaaS 的进程治理能力,而无需立刻引入 Kubernetes。对已有 Node 后端,迁移成本通常很低:多数场景只需把启动命令换成 pm2 start,再按需配置 ecosystem 文件与开机脚本。
与替代方案
- 相比 nodemon,PM2 面向生产守护与集群调度,nodemon 侧重开发时文件变更自动重启,二者常搭配使用(开发用 nodemon,上线用 PM2)。
- 相比 forever,PM2 功能面更完整(集群模式、零停机 reload、监控面板、startup 脚本、Docker runtime),社区体量与文档也更成熟;forever 更轻量,适合只需简单 keep-alive 的场景。
- 相比 systemd 直接管理 node 单元,PM2 提供应用级进程列表、日志与热重载抽象,单机多 Node 服务时运维心智负担更低;若团队已全面容器化并由 K8s 编排,PM2 的价值主要在 VM/裸机或简单 Docker 部署层。
- 相比 Docker + K8s,PM2 适合单台或少量服务器的 Node 守护,无需编排集群即可落地;K8s 适合多服务、弹性伸缩与复杂发布流水线,但学习与运维成本更高。
- 边界说明:PM2 主要解决进程级治理,不替代反向代理(Nginx)、服务发现或配置中心;许可证为 AGPL-3.0,若需闭源商用分发或 SaaS 嵌入,应评估合规或联系官方获取其他许可。
适应人群
- 在 VPS、裸机或简单 Docker 环境部署 Node.js/Bun 后端,需要崩溃自愈与日志集中查看的全栈工程师。
- 希望用集群模式吃满多核 CPU、并以零停机方式发布 API 服务的后端与 DevOps 工程师。
- 维护多台 Linux/macOS 服务器、需要统一
pm2 list管理进程并配置开机自启的中小团队运维。
如何使用
前置条件
- 操作系统:Linux、macOS 或 Windows。
- 运行时:Node.js 18+,或 Bun 1+(仅 Bun 时需将
node指向 Bun 的兼容运行时,详见官方 README)。 - 包管理:npm 或 bun 可用于全局安装 PM2 CLI。
安装方式
通过 npm(推荐):
npm install pm2 -g通过 Bun:
bun install pm2 -g仅安装 Bun、无 Node.js 时,需让 PM2 的 shebang 能解析到 Bun:
sudo ln -s $(which bun) /usr/local/bin/node升级 PM2:
npm install pm2@latest -gpm2 update首次运行
# 守护启动应用pm2 start app.js
# 查看进程列表pm2 list
# 集群模式(按 CPU 核数)pm2 start api.js -i max
# 保存当前进程列表(配合开机自启)pm2 save生成开机自启脚本(按提示执行输出的 sudo 命令):
pm2 startuppm2 saveDocker 中以前台方式运行(示例):
RUN npm install pm2 -gCMD [ "pm2-runtime", "npm", "--", "start" ]验证是否成功
pm2 --version # 应输出版本号pm2 list # 应显示 online 状态的应用pm2 describe app # 查看单应用详情(将 app 换为实际名称或 id)pm2 logs # 应能看到应用标准输出/错误日志确认 pm2 startup 后重启机器,pm2 list 中进程应自动恢复为 online。
常见坑 / 注意事项
- AGPL-3.0 许可:修改 PM2 并以网络服务形式提供时可能触发 AGPL 义务;商业闭源场景请先阅读 README License 段或联系 Keymetrics。
- 集群模式仅限 Node 集群场景:
-i多实例主要面向 Node.js HTTP 等可集群化的应用;非 Node 二进制或脚本需单独评估是否适合 cluster。 - 仅 Bun 环境:除 symlink
node外,部分生态工具仍假设真实 Node.js,混用前应实测目标依赖。 - 日志磁盘占满:生产环境建议
pm2 install pm2-logrotate并配置轮转策略,避免长期pm2 logs不写回导致磁盘爆满。 pm2 update与进程列表:升级 PM2 后执行pm2 update以平滑迁移守护进程;重大版本升级前阅读 CHANGELOG。- PM2+ 云服务:官方提供 PM2+ 监控面板(可选),开源 CLI 本身可离线使用,无需绑定 SaaS。