PM2

义项:Node.js进程管理工具
PM2

PM2 是一款面向 Node.js 应用的进程管理器,全称 Process Manager 2,内置负载均衡功能,已开源发布。它以命令行方式在服务器上启动、守护、重启和监控应用进程,使应用在崩溃或服务器重启后自动恢复运行[1][2]。PM2 于 2013 年由 Alexandre Strzelewicz 创建,代码托管在 GitHub,可通过 npm 安装,采用 AGPLv3 许可证发布[2]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

PM2 是 Node.js 运行环境下的生产用进程管理器,官方将其描述为带有内置负载均衡器的生产环境进程管理工具,能够持续保持应用存活、在不中断服务的前提下重载应用并集中管理日志[1][3]。它以守护进程的方式在后台托管应用,用户通过命令行子命令完成启动、停止、重启、删除与查看状态等操作。

PM2 最初为 Node.js 设计,但其启动命令也可用于解释执行的脚本和可执行文件,例如通过指定解释器运行为 Python、Ruby 或 shell 脚本,因此常被当作通用的进程守护工具使用[4]。项目在 npm 上以 pm2 为包名分发,通常以全局方式安装后使用。

原理

PM2 启动应用后先拉起一个常驻守护进程,由它派生并托管各个被管理的应用进程,同时记录进程编号、名称、重启次数、CPU 与内存占用等元数据,供列表与详情命令读取。应用退出后,守护进程按设定的策略自动重启;可配置重启延迟、最小存活时长、最大重启次数以及按 cron 表达式定时重启等规则[1]。

PM2 提供 fork 与 cluster 两种执行模式。fork 模式等同于直接以单进程方式运行应用;cluster 模式会依据 CPU 核心数派生多个实例,并在实例之间分摊 HTTP、TCP、UDP 连接,其底层依赖 Node.js 的 cluster 模块,使子进程可以共享监听端口,无需修改业务代码[5]。实例数量可用 max 表示全部核心、-1 表示核心数减 1,也可填写具体数字[5]。

重启语义上,restart 会终止进程再重新拉起,服务出现短暂中断;reload 则先派生新工作进程,待其可以接受连接后再关闭旧进程,用于实现零停机更新。若重载在超时时间内未完成,PM2 会回退为普通重启[5]。为配合平滑退出,应用可以捕获 PM2 首先发送的 SIGINT 信号,在退出前关闭数据库连接或处理完剩余请求[5]。

对于多应用场景,PM2 使用配置文件(ecosystem 文件,可为 js、json 或 yaml 格式)声明每个应用的脚本路径、实例数、执行模式、环境变量、日志文件与重启阈值等属性,再由一条命令批量启动[6]。日志方面,PM2 收集被管理进程的标准输出与错误输出,支持实时查看、按格式输出与清空;日志轮转需借助 pm2-logrotate 模块实现[4]。

发展历程

PM2 由法国开发者 Alexandre Strzelewicz 于 2013 年编写,首个版本发布于 2013 年 6 月 27 日。其起因是当时缺少专门面向 Node.js 的应用守护与监控方案,作者希望工具部署在服务器与应用程序之间,一台服务器运行一个 PM2 来管理本机进程[2][7]。

2014 年,作者在 PM2 之上创办 Keymetrics 公司,提供面向 PM2 的 Web 监控仪表盘服务;PM2 本身仍以开源形式维护[7][8]。据 2016 年 12 月的统计,项目累计下载超过 2000 万次,贡献者约 140 人;同年前后,它曾在 GitHub 的 JavaScript 项目中进入受欢迎程度前列[7][9]。

版本迭代方面,3.0.0 于 2018 年 6 月发布,移除了 gracefulReload 命令与对 Node.js 0.12 的支持,并调整了日志合并的默认行为[10]。维基百科记载的稳定版为 5.3.1,发布于 2024 年 1 月 20 日[2]。

应用

PM2 的典型用途是在服务器上长期运行 Web 服务与后台作业。常见命令包括以 pm2 start 启动并命名应用、以 pm2 list 查看全部进程状态、以 pm2 monit 打开终端内的 CPU 和内存实时面板,以及用 pm2 logs 跟踪输出。

在可用性方面,pm2 startup 可以按系统自动生成开机自启脚本,支持 systemd、upstart、launchd 与 rc.d 等初始化系统;配合 pm2 save 固化进程列表,服务器重启后由已保存的快照恢复应用[4][1]。PM2 还内置部署系统,可通过 SSH 在一台或多台服务器上执行初始化、更新与回滚[1]。

对容器场景,PM2 提供 pm2-runtime 命令作为 node 命令的替代入口,用于在前台运行应用并适配容器生命周期[4]。此外,PM2 支持以 pm2 serve 将静态文件通过 HTTP 提供,并提供模块机制,可安装日志轮转、服务器状态监控等模块扩展功能[1]。在代码层面,PM2 还公开 JavaScript 接口,便于在程序内部调用启动、停止与事件订阅[1][6]。

局限

cluster 模式及其连接分摊能力仅适用于 Node.js 应用,其他语言编写的脚本只能以 fork 模式运行,无法借助该机制利用多核并行[5]。同时,cluster 模式要求应用本身无状态,会话、WebSocket 连接等数据不应保存在进程内存中,否则需要借助外部存储来共享状态[5]。

零停机重载并非在所有情况下都能实现。如果应用退出时仍有未关闭的连接,重载可能耗时过长或被判定为失败,从而回退为带有短暂中断的普通重启[5]。日志轮转也不属于默认能力,需要另行安装模块才能按大小或时间切分日志文件[4]。

PM2 的定位是单机进程管理,其设计预设为一台服务器运行一个 PM2 实例管理本机进程,跨服务器的统一监控依赖其配套的 Web 服务[7]。它交由进程管理器维持应用存活,并不替代容器编排或集群调度系统去完成多机调度与资源分配。

参见

  • Node.js —— PM2 主要面向的 JavaScript 服务器运行环境。

  • 守护进程 —— PM2 在后台常驻并托管应用进程的运行形态。

  • 负载均衡 —— PM2 在 cluster 模式下于多个进程间分摊连接所依赖的机制。

  • npm —— PM2 的主要分发与安装渠道。

  • 容器 —— PM2 通过 pm2-runtime 适配的运行环境。

参考资料

  1. PM2 [引用日期2026-10-29]
  2. PM2 (software) [引用日期2026-10-29]
  3. Dependents (1700) [引用日期2026-10-29]
  4. pm2 [引用日期2026-10-29]
  5. Cluster Mode [引用日期2026-10-29]
  6. JSON Micro-Service configuration with PM2 [引用日期2026-10-29]
  7. alven.co 上的网页 [引用日期2026-10-29]
  8. ewdn.com 上的网页 [引用日期2026-10-29]
  9. PM2 (software) [引用日期2026-10-29]
  10. CHANGELOG [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:48:42Z

历史版本

本条目引用的词条
Node.js 守护进程 负载均衡 npm 容器