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 是一个成熟、可靠、低门槛的选择

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

相关推荐
程序员agions3 小时前
Node.js 爬虫实战指南(四):反反爬策略大全,和网站斗智斗勇
爬虫·node.js
程序员爱钓鱼3 小时前
Node.js 编程实战:博客系统 —— 数据库设计
前端·后端·node.js
程序员agions4 小时前
Node.js 爬虫实战指南(二):动态页面爬取,Puppeteer 大显身手
爬虫·node.js
Direction_Wind6 小时前
抖音视频下载,直播间监控,直播间发言采集,最新加密算法
python·node.js
奶糖的次元空间19 小时前
带你用 Javascript 生成器玩转「会暂停」的函数
node.js
Hilaku1 天前
我是如何用一行 JS 代码,让你的浏览器内存瞬间崩溃的?
前端·javascript·node.js
五仁火烧1 天前
npm run build命令详解
前端·vue.js·npm·node.js
前端付豪1 天前
NodeJs 做了什么 Fundamentals Internals
前端·开源·node.js
局外人LZ1 天前
libsodium.js:web端与 Node.js 的现代加密工具集,构建前端安全加密体系
前端·javascript·node.js