当前位置: 首页 > news >正文

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 原生启动方式的问题

传统启动方式:

nodeapp.js

存在的问题:

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

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


2. PM2 帮你解决了什么?

PM2 提供了:

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

三、PM2 的核心功能

1. 启动和管理应用

pm2 start app.js pm2 stop app pm2 restart app pm2 delete app

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


2. 进程守护与自动重启

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

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

这对线上服务至关重要。


3. 日志管理

pm2 logs pm2 logs app

PM2 会自动收集:

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

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


4. 开机自启

pm2 startup pm2 save

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


5. Cluster 模式(多核利用)

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

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

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

http://www.jsqmd.com/news/240504/

相关文章:

  • 华为OD机考双机位C卷 - 书籍叠放(Java Python JS C/C++ GO )
  • 算法题 按奇偶排序数组 II
  • 计算机毕业设计springboot博物馆藏品管理系统 基于SpringBoot的文博资产数字化运营平台 SpringBoot驱动的博物馆珍藏智慧管护系统
  • 鸿蒙ArkTS开发实战-从零打造高可用待办事项App【QuickTodo】
  • 计算机毕业设计springboot博物馆预约管理系统 基于SpringBoot的文博场馆分时预约平台 SpringBoot驱动的智慧博物馆访客预约与票务系统
  • 大数据领域中 Eureka 的服务注册与发现的容灾备份方案
  • 深度调优:在 GNN 涡轮风扇发动机寿命预测中,学习率调度器如何决定模型生死?
  • 某程旅行小程序爬虫技术解析与实战案例
  • 当代人 “最放不下的前任”
  • Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘torchaudio’ 问题
  • 【毕业设计】基于深度学习卷积神经网络天上飞的识别基于python-CNN深度学习卷积神经网络天上飞的识别
  • 算法题 和相同的二元子数组
  • AI学习笔记整理(45)——大模型数据读取技术与模型部署
  • 计算机毕业设计springboot财务管理系统 基于SpringBoot的企业财务一体化运营平台 SpringBoot驱动的智能记账与资金管控系统
  • Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘torchvision’ 问题
  • 计算机深度学习毕设实战-基于python-CNN机器学习卷积神经网络对蔬菜识别基于python-CNN卷积神经网络对蔬菜识别
  • 江苏硕晟LIMS:全力响应资质认定政策,打造生态环境监测信息管理典范
  • 企业防泄密软件都有哪些?这六款防泄密软件帮您解决泄密难题!
  • 借助AI智能技术,十大专业降重网站提供免费试用服务,帮助用户快速完成文本改写任务
  • Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘torch’ 问题
  • Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘torch’ 问题
  • 计算机毕业设计springboot材料分析知识系统 基于SpringBoot的材料智能解析与知识共享平台 SpringBoot驱动的材料数据挖掘与性能评估系统
  • ssh 远程服务器,permission deny
  • 这十大降重平台凭借AI智能改写功能脱颖而出,并提供免费试用,满足用户对高质量文本的需求
  • 企业级CI/CD工具选型:Argo CD vs Tekton vs Arbess
  • 企业级CI/CD工具选型:Argo CD vs Tekton vs Arbess
  • AI应用架构师的人机协作新范式流程设计最佳实践的未来趋势
  • AI应用架构师的人机协作新范式流程设计最佳实践的未来趋势
  • 成本杀手还是利润引擎?算清企业级AI Agent平台这笔经济账
  • 计算机深度学习毕设实战-基于python-CNN深度学习卷积神经网络天上飞的识别基于python卷积神经网络天上飞的识别