PM2 从基础到进阶完全指南
PM2(Process Manager 2)是 Node.js 生态中最流行、功能最强大的进程管理工具,它不仅能让 Node.js 应用在后台稳定运行、自动重启,还支持集群模式(利用多核 CPU)、日志管理、实时监控、一键部署等高级功能,是 Node.js 应用生产环境部署的标配工具。
本文将从基础安装、常用命令,到配置文件、集群模式、日志管理、监控、部署、性能优化,全面讲解 PM2 的用法,附完整可运行示例,帮你快速掌握 PM2。
一、PM2 是什么?核心优势
PM2 是一个守护进程管理器,它的核心价值在于:
- 进程守护:应用崩溃/异常退出时自动重启,保证服务高可用
- 集群模式:一键启动多个应用实例,利用多核 CPU,提升并发能力
- 日志管理:自动收集、聚合、轮转日志,避免日志文件过大
- 实时监控:终端/Web 端监控应用的 CPU、内存、重启次数等
- 一键部署:通过 Git 拉取代码、安装依赖、重启应用,实现自动化部署
- 零停机重启:集群模式下支持“零停机重载”,更新代码不中断服务
- 跨平台:支持 Linux、macOS、Windows
二、基础篇:安装与常用命令
1. 安装 PM2
PM2 推荐全局安装,方便在任何目录下使用:
1 | |
2. 核心概念
在使用命令前,先了解几个核心概念:
- 应用(App):PM2 管理的一个进程(如一个 Node.js 应用)
- 实例(Instance):一个应用可以启动多个实例(集群模式)
- 进程 ID(PID):系统分配给进程的唯一 ID
- PM2 ID:PM2 内部给应用分配的 ID(从 0 开始)
- 名称(Name):应用的自定义名称(推荐设置,方便管理)
3. 常用命令速查
| 命令分类 | 命令 | 说明 |
|---|---|---|
| 启动应用 | pm2 start app.js |
启动一个 Node.js 应用 |
pm2 start app.js --name my-app |
启动并指定应用名称 | |
pm2 start app.js --watch |
启动并开启文件监听(代码修改自动重启) | |
pm2 start app.js --max-memory-restart 500M |
内存超过 500M 自动重启 | |
pm2 start app.js --env production |
指定环境变量为 production | |
| 查看应用 | pm2 list |
查看所有应用列表(最常用) |
pm2 ls |
同上,简写 | |
pm2 show my-app |
查看指定应用的详细信息 | |
pm2 info my-app |
同上,简写 | |
| 日志管理 | pm2 logs |
查看所有应用的实时日志 |
pm2 logs my-app |
查看指定应用的实时日志 | |
pm2 logs --lines 100 |
查看最后 100 行日志 | |
pm2 logs --err |
仅查看错误日志 | |
pm2 flush |
清空所有日志 | |
| 重启/重载 | pm2 restart my-app |
重启指定应用(会中断服务) |
pm2 restart all |
重启所有应用 | |
pm2 reload my-app |
零停机重载(集群模式下推荐,不中断服务) | |
pm2 reload all |
零停机重载所有应用 | |
| 停止/删除 | pm2 stop my-app |
停止指定应用 |
pm2 stop all |
停止所有应用 | |
pm2 delete my-app |
删除指定应用(从 PM2 列表中移除) | |
pm2 delete all |
删除所有应用 | |
| 监控 | pm2 monit |
终端实时监控(CPU、内存、日志) |
pm2 plus |
打开 Web 监控面板(PM2 Plus,付费版) | |
| 其他 | pm2 save |
保存当前应用列表(用于开机自启) |
pm2 startup |
生成开机自启脚本 | |
pm2 update |
升级 PM2 并保留应用列表 | |
pm2 kill |
杀死 PM2 守护进程(会停止所有应用) |
三、基础命令详解:最常用的操作
1. 启动应用:多种启动方式
(1)基础启动
1 | |
(2)带参数启动
1 | |
(3)启动非 Node.js 应用
PM2 不仅能管理 Node.js 应用,还能管理 Python、Shell 等其他进程:
1 | |
2. 查看应用:pm2 list / pm2 show
(1)pm2 list:查看应用列表
这是最常用的命令,执行后会显示:
id:PM2 内部 IDname:应用名称namespace:命名空间(默认 default)version:应用版本(从 package.json 读取)mode:模式(fork 或 cluster)pid:系统进程 IDuptime:运行时间status:状态(online/stopped/errored)cpu:CPU 使用率mem:内存使用量user:运行用户watching:是否开启文件监听
(2)pm2 show:查看应用详情
1 | |
会显示应用的路径、日志路径、环境变量、重启次数、错误次数等详细信息。
3. 日志管理:pm2 logs
PM2 会自动收集应用的 stdout(标准输出)和 stderr(标准错误)日志,默认存放在 ~/.pm2/logs/ 目录下。
(1)查看日志
1 | |
(2)清空日志
1 | |
4. 重启/重载:pm2 restart / pm2 reload
(1)pm2 restart:重启(会中断服务)
1 | |
restart 会先停止应用,再重新启动,会短暂中断服务,适合开发环境或非关键应用。
(2)pm2 reload:零停机重载(推荐生产环境)
1 | |
reload 会逐个重启实例,保证始终有实例在运行,不中断服务,生产环境强烈推荐!
注意:
reload仅在集群模式(mode: 'cluster')下有效,fork 模式下会退化为restart。
5. 停止/删除:pm2 stop / pm2 delete
1 | |
四、进阶篇:配置文件 ecosystem.config.js
当应用越来越多、配置越来越复杂时,用命令行参数管理会很麻烦,PM2 推荐使用配置文件(默认 ecosystem.config.js)来管理所有应用的配置。
1. 生成配置文件
1 | |
2. 完整配置文件示例
这是一个包含所有常用选项的配置文件,可直接复制使用:
1 | |
3. 使用配置文件
1 | |
五、进阶篇:集群模式(利用多核 CPU)
Node.js 是单线程的,默认只能利用一个 CPU 核心,PM2 的集群模式(Cluster Mode)可以一键启动多个实例,利用多核 CPU,大幅提升应用的并发能力。
1. 集群模式的优势
- 利用多核 CPU:启动多个实例,每个实例运行在一个 CPU 核心上
- 负载均衡:PM2 自动在多个实例之间负载均衡请求
- 零停机重启:更新代码时逐个重启实例,不中断服务
- 高可用:一个实例崩溃,其他实例仍在运行,PM2 自动重启崩溃的实例
2. 配置集群模式
在配置文件中设置:
1 | |
3. 启动集群模式
1 | |
4. 零停机重载
集群模式下,使用 pm2 reload 实现零停机重载:
1 | |
六、进阶篇:日志管理与轮转
PM2 会自动收集日志,但如果不做轮转,日志文件会越来越大,占用磁盘空间,推荐使用 pm2-logrotate 模块来做日志轮转。
1. 安装 pm2-logrotate
1 | |
2. 配置 pm2-logrotate
1 | |
3. 查看 pm2-logrotate 配置
1 | |
七、进阶篇:监控与管理
1. 终端监控:pm2 monit
1 | |
可以实时查看:
- 每个应用的 CPU、内存使用率
- 每个应用的日志
- PM2 自身的状态
退出监控:Ctrl + C
2. Web 监控:PM2 Plus
PM2 Plus 是 PM2 官方的 Web 监控平台(付费版,有免费额度),功能更强大:
- Web 端实时监控 CPU、内存、磁盘、网络
- 历史数据统计与图表
- 告警通知(邮件、Slack、Webhook)
- 远程管理应用(重启、重载、查看日志)
- 多服务器管理
使用方式:
1 | |
3. PM2 自身管理
1 | |
八、进阶篇:一键部署(pm2 deploy)
PM2 内置了部署工具 pm2 deploy,可以通过 Git 拉取代码、安装依赖、重启应用,实现自动化部署。
1. 前置准备
- 服务器上安装了 Git、Node.js、PM2
- 本地可以通过 SSH 免密登录服务器
- 代码托管在 Git 仓库(GitHub、GitLab、Gitee 等)
2. 配置部署
在 ecosystem.config.js 中配置 deploy 部分(参考上面的完整配置文件)。
3. 部署命令
1 | |
九、进阶篇:开机自启
生产环境需要让 PM2 和应用在服务器重启后自动启动。
1. 生成开机自启脚本
1 | |
执行后会输出一段命令,复制并执行这段命令,即可设置开机自启。
2. 保存当前应用列表
1 | |
3. 取消开机自启
1 | |
十、性能优化与最佳实践
1. 生产环境最佳实践
- 使用集群模式:
instances: 'max',利用多核 CPU - 使用配置文件:
ecosystem.config.js,方便管理 - 开启日志轮转:
pm2 install pm2-logrotate,避免日志文件过大 - 设置内存限制:
max_memory_restart: '500M',防止内存泄漏 - 使用零停机重载:
pm2 reload,更新代码不中断服务 - 设置开机自启:
pm2 startup+pm2 save - 关闭文件监听:
watch: false,生产环境不需要 - 使用 PM2 Plus:监控应用状态,及时发现问题
2. 性能优化
- 集群模式:利用多核 CPU,提升并发能力
- 静态资源由 Nginx 处理:不经过 Node.js,提升性能
- 启用 Gzip 压缩:Nginx 或 Express 的
compression中间件 - 启用缓存:Redis 缓存热点数据
- 避免同步操作:所有 I/O 操作使用异步方式
十一、常见问题排查
1. 应用启动失败
- 查看应用日志:
pm2 logs my-app --err - 查看应用详情:
pm2 show my-app - 检查应用入口文件路径是否正确
- 检查环境变量是否配置正确
- 检查端口是否被占用
2. 应用频繁重启
- 查看应用日志:
pm2 logs my-app - 检查是否有未捕获的异常
- 检查内存是否超过限制:
max_memory_restart - 检查
min_uptime是否设置过短 - 检查
max_restarts是否设置过大
3. 内存泄漏
- 用
pm2 monit监控内存使用情况 - 设置
max_memory_restart,超过限制自动重启 - 用 Chrome DevTools 或
clinic.js分析内存泄漏 - 检查是否有未关闭的数据库连接、文件句柄
4. PM2 命令不生效
- 检查 PM2 是否在运行:
pm2 list - 如果 PM2 未运行,先启动 PM2:
pm2 resurrect(恢复保存的应用)或pm2 start ecosystem.config.js - 升级 PM2:
pm2 update
十二、总结
PM2 是 Node.js 应用生产环境部署的标配工具,它的进程守护、集群模式、日志管理、监控、一键部署等功能,能让 Node.js 应用稳定、高效地运行。
掌握本文的内容,已经可以用 PM2 管理绝大多数 Node.js 应用了。建议大家动手实践一下,跟着步骤配置 ecosystem.config.js,启动集群模式,体验零停机重载,加深理解!
如果需要更高级的功能,可以参考 PM2 官方文档:https://pm2.keymetrics.io/docs/