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

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

相关推荐
莫有杯子的龙潭峡谷1 小时前
在 Windows 系统上安装 OpenClaw
人工智能·node.js·安装教程·openclaw
朝朝暮暮an8 小时前
Node.js-第一天学习内容
node.js
lichenyang4539 小时前
Node.js AI 开发入门 - 完整学习笔记
人工智能·学习·node.js
岁岁种桃花儿9 小时前
NodeJs从入门到上天:什么是Node.js
前端·node.js
一心赚狗粮的宇叔1 天前
VScode常用扩展包&Node.js安装及npm包安装
vscode·npm·node.js·web
花间相见1 天前
【AI开发】—— Ubuntu系统使用nvm管理Node.js多版本,版本切换一键搞定(实操完整版)
linux·ubuntu·node.js
嘿是我呀1 天前
【用npm安装node时报错“npm 无法加载文件”】
前端·npm·node.js
西门吹-禅2 天前
prisma
node.js
怪兽毕设2 天前
基于SpringBoot的选课调查系统
java·vue.js·spring boot·后端·node.js·选课调查系统
心.c2 天前
Vue3+Node.js实现文件上传分片上传和断点续传【详细教程】
前端·javascript·vue.js·算法·node.js·哈希算法