PM2 是什么?一篇讲清 Node.js 进程管理器的文章

在 Node.js 应用部署到服务器之后,开发者很快会遇到几个现实问题:

  • 服务挂了怎么办?
  • 服务器重启后应用如何自动恢复?
  • 如何管理多个 Node.js 服务?
  • 如何查看日志、监控运行状态?

PM2(Process Manager 2) 正是为解决这些问题而诞生的。


一、PM2 是什么?

PM2 是一个用于 Node.js 应用的生产级进程管理器

简单说,它是一个 守护程序(daemon)+ 管理工具,负责:

  • 启动 Node.js 应用
  • 保证应用持续运行
  • 管理多个进程
  • 提供日志、监控、重启能力

虽然 PM2 主要用于 Node.js,但它本质上是通用进程管理器,也可以管理:

  • Python 程序
  • Shell 脚本
  • 任意可执行文件

二、为什么需要 PM2?

1. Node.js 原生启动方式的问题

传统启动方式:

bash 复制代码
node app.js

存在的问题:

  • 进程崩溃后不会自动重启
  • SSH 断开后进程可能退出
  • 服务器重启后需要手动再启动
  • 无法统一管理多个服务

这些在开发阶段问题不大,但在生产环境是不可接受的。


2. PM2 帮你解决了什么?

PM2 提供了:

  • 进程守护:程序崩溃自动重启
  • 后台运行:SSH 断开也不会退出
  • 开机自启:服务器重启后自动拉起服务
  • 日志管理:集中查看 stdout / stderr
  • 多进程管理:方便管理多个服务
  • 负载均衡(cluster 模式)

三、PM2 的核心功能

1. 启动和管理应用

bash 复制代码
pm2 start app.js
pm2 stop app
pm2 restart app
pm2 delete app

你可以像管理服务一样管理 Node.js 程序。


2. 进程守护与自动重启

当应用因为异常退出时,PM2 会自动将其拉起:

  • 内存溢出
  • 未捕获异常
  • 手动 kill
  • 程序崩溃

这对线上服务至关重要。


3. 日志管理

bash 复制代码
pm2 logs
pm2 logs app

PM2 会自动收集:

  • 标准输出(stdout)
  • 错误输出(stderr)

无需自己重定向日志文件。


4. 开机自启

bash 复制代码
pm2 startup
pm2 save

服务器重启后,PM2 会自动恢复所有已保存的进程。


5. Cluster 模式(多核利用)

Node.js 单进程只能使用一个 CPU 核心,PM2 可以:

bash 复制代码
pm2 start app.js -i max
  • 自动根据 CPU 核心数启动多个实例
  • 内置负载均衡
  • 对外表现为一个服务

这在高并发场景非常常见。


四、PM2 的典型使用场景

1. Node.js Web 服务

  • Express / Koa / NestJS
  • Next.js(standalone / custom server)

2. 后台任务 / 定时脚本

  • 消费队列
  • 定时任务
  • 长时间运行脚本

3. 多服务部署

  • API 服务
  • Web 前端服务
  • Worker 服务

全部交给 PM2 统一管理。


五、PM2 和 Docker 的关系

PM2 和 Docker 不是对立关系

  • 不使用 Docker:PM2 是最简单可靠的方案

  • 使用 Docker

    • 容器内通常只跑一个进程,PM2 可选
    • 但在某些场景(多 Node 实例、日志、重启)仍然有价值

是否在 Docker 中使用 PM2,取决于团队规范和复杂度。


六、PM2 的优缺点

优点

  • 使用简单,学习成本低
  • 功能完善,生产环境成熟
  • 社区活跃,文档齐全
  • 对 Node.js 生态支持非常好

缺点

  • 不适合超大规模集群调度(应使用 Kubernetes)
  • 对非 Node 项目只是"能用",不是最优
  • Cluster 模式下调试略复杂

七、总结

PM2 是 Node.js 应用部署中几乎绕不开的工具

如果你:

  • 在 Linux 服务器上跑 Node.js
  • 不想自己写守护脚本
  • 希望服务稳定、可管理、可恢复

那么 PM2 是一个成熟、可靠、低门槛的选择

它不是"高大上"的分布式调度系统,但在单机或中小规模部署中,非常实用、非常工程化

相关推荐
codingWhat17 小时前
能效平台设计方案(打通gitlab和飞书)
后端·node.js·koa
见过夏天2 天前
Node.js 常用命令全攻略
node.js
前端双越老师3 天前
我从 0 开发的 AI Agent 智语项目发布了
前端·node.js·agent
kyriewen3 天前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
donecoding4 天前
3 条命令搞定闭环 Monorepo:Lerna 版本管理 + 拓扑构建 + 自定义分发
前端·前端框架·node.js
Flynt5 天前
npm v12 来了:allowScripts 默认关闭,我的项目差点跑不起来
安全·npm·node.js
叫我Paul就好6 天前
尝试 Node 搭建后端-开发框架
node.js
风止何安啊7 天前
网课倍速痛点解决:一套前端代码实现自由控速播放器
前端·javascript·node.js
糖拌西瓜皮8 天前
Node.js核心模块实战:文件、路径、HTTP与流处理
javascript·node.js
糖拌西瓜皮8 天前
Node.js工程化实践:包管理、TypeScript配置与代码质量
typescript·node.js