885 字
4 分钟
PM2
运维
/
工具 /
前端 一、PM2介绍
PM2 缩写是 Process Manager 2 ,是一个守护进程管理器,保持应用程序在线运行
它由 Node.js 编写,通过 NPM 即可安装
PM2 的核心定位是:在操作系统 init 进程和你的应用程序之间充当一个中间层
它接管了应用程序的启动、监控、重启、日志等全生命周期管理
注意:这里的 PM2 跟“PM2.5”没有半毛钱关系(笑)
二、认知
Node.js 基于 V8 引擎,其 JavaScript 代码执行在单线程中
如果主线程崩溃、内存耗尽,那么服务就宕了
线上运行的 Node 应用,是需要做自动重启、日志管理、多进程负载均衡、性能监控等一系列事情的
PM2 正是为解决这些“跑起来之后的事”而生的
PM2 解决的核心问题是 Node.js 进程的生产环境运维难题:
-
进程守护:node 应用太脆了,pm2 充当“守护者”——应用崩溃后自动重启,确保服务持续可用
-
日志管理:默认 node日志 只输出到控制台,pm2 会自动采集所有进程的 stdout 和 stderr,写入
~/.pm2/logs目录,以“进程名-out.log”和“进程名-error.log”分别保存 -
负载均衡:Node 是单线程的,无法利用多核 CPU。PM2 基于 Node.js 的 cluster 模块,可以在服务器所有 CPU 核心上运行多个应用实例
-
性能监控:pm2 提供实时的 CPU 和内存监控,可通过
pm2 monit查看
三、适用场景
PM2 最适合以下场景:
| 场景 | 说明 |
|---|---|
| Node.js 微服务部署 | 需要集群模式充分利用多核 CPU |
| 单机生产环境 | 单台服务器上运行多个 Node 应用 |
| 中小型生产系统 | 团队希望简单可靠的进程管理 |
| 需要零停机更新的 Web 服务 | 使用 pm2 reload 实现无感知发布 |
| 后台任务 / Cron Worker | fork 模式适合定时任务或队列工作者 |
| 跨平台环境 | 需要在 Linux/macOS/Windows 上保持一致体验 |
四、使用
1. 安装
1# 全局安装2npm install pm2@latest -g2. 启动应用
1# 基本启动2pm2 start app.js3
4# 指定名称5pm2 start app.js --name my-api6
7# 集群模式(利用所有 CPU 核心)8pm2 start app.js -i max9
10# 指定进程数11pm2 start app.js -i 412
13# 内存超限自动重启14pm2 start app.js --max-memory-restart 200M15
16# 文件变更自动重启(仅开发环境)17pm2 start app.js --watch18
19# 定时重启20pm2 start app.js --cron "0 3 * * *"3. 进程管理
1pm2 list # 查看所有进程状态2pm2 show <id|name> # 查看进程详情3pm2 monit # 终端实时监控面板4pm2 logs # 查看所有日志5pm2 logs <name> # 查看特定进程日志6pm2 restart <name> # 重启进程7pm2 reload <name> # 零停机重载(集群模式)8pm2 stop <name> # 停止进程9pm2 delete <name> # 删除进程10pm2 stop all # 停止所有11pm2 restart all # 重启所有4. 配置文件(Ecosystem File)
生成配置文件:
1pm2 ecosystem示例 ecosystem.config.js:
1module.exports = {2 apps: [{3 name: 'api',4 script: './server.js',5 instances: 'max',6 exec_mode: 'cluster',7 max_memory_restart: '200M',8 watch: false,9 ignore_watch: ['node_modules', 'logs', 'uploads'],10 env: {11 NODE_ENV: 'development'12 },13 env_production: {14 NODE_ENV: 'production'15 }16 }]17}启动:
1pm2 start ecosystem.config.js2pm2 start ecosystem.config.js --env production5. 开机自启
1# 生成启动脚本2pm2 startup3
4# 保存当前进程列表5pm2 save6
7# 之后每次服务器重启,PM2 会自动恢复所有进程6. 其他有用命令
1pm2 describe <id> # 查看进程详细信息2pm2 plus # 开启 Web 监控面板3pm2 update # 更新 PM2 及内存中的进程信息 编辑于 2026-06-05
部分信息可能已经过时
© 2026 Jiy. All Rights Reserved.
© 2026 Jiy. All Rights Reserved.