node pm2 完整介绍
2026-7-11 杜世伟 JavaScript
一、什么是 PM2
PM2 是一款基于 Node.js 开发的生产环境进程管理工具,专门用来托管 Node 后端项目(Express、Koa、Nest、Nuxt、Next 等)。
原生 Node
node app.js 运行程序有致命缺点:
- 终端一关程序直接退出
- 程序崩溃不会自动重启
- 无法多进程利用多核 CPU
- 不方便查看日志、监控、开机自启
PM2 就是用来解决以上问题,是 Node 项目服务器部署最主流工具。
二、核心功能
-
进程守护(保活)
程序异常崩溃、报错退出后,PM2 会自动重启进程,保证服务持续在线。
-
后台常驻运行
脱离终端窗口,关闭 SSH 连接服务器后项目依旧运行。
-
集群多实例负载均衡
自动根据 CPU 核心创建多进程,充分利用服务器多核性能,分摊请求压力。
-
日志集中管理
统一收集标准输出、错误日志,支持实时查看、清空、按日期分割日志。
-
一键开机自启
服务器重启后,自动拉起所有托管项目,无需手动启动。
-
进程监控
查看每个进程 CPU、内存占用,内置可视化监控面板。
-
零停机热重载更新
pm2 reload重启服务不会中断现有用户连接,适合线上发布。
三、安装方式
全局安装(服务器必用)
npm install pm2 -g # 或 yarn yarn global add pm2
安装后任意目录可直接使用
pm2 命令。
四、两种启动方式
1. 直接启动单文件
# 启动入口文件并命名进程 pm2 start app.js --name api-server # 执行package.json里的npm脚本 pm2 start npm --name web -- start pm2 start npm --name dev -- run dev
2. 配置文件启动(推荐项目规范化)
根目录新建 ecosystem.config.js
module.exports = {
apps: [
{
name: "backend", // 进程名
script: "./src/index.js", // 入口文件
instances: "max", // 最大CPU核心数多开
exec_mode: "cluster", // 集群模式
env: {
NODE_ENV: "production",
PORT: 3000
},
out_file: "./logs/out.log", // 普通日志
error_file: "./logs/err.log" // 错误日志
}
]
}
pm2 start ecosystem.config.js
五、最常用核心命令
| 命令 | 作用 |
|---|---|
| pm2 list / pm2 ls | 列出所有托管进程 |
| pm2 restart 进程名 / ID | 重启进程 |
| pm2 reload 进程名 | 零停机重载(线上发布首选) |
| pm2 stop 进程名 | 暂停进程 |
| pm2 delete 进程名 | 从列表删除进程 |
| pm2 logs | 实时打印日志 |
| pm2 monit | 图形化监控面板 |
| pm2 save | 保存当前进程列表 |
| pm2 startup | 设置开机自启 |
| pm2 flush | 清空所有日志 |
六、运行模式区别
-
fork 模式(默认)
单进程运行,适合不需要多并发的小项目,不做多核分摊。
-
cluster 集群模式
多进程,PM2 做负载分发请求,充分利用多核 CPU,线上生产环境标配。
七、适用场景
✅ Node.js 后端接口服务
✅ Next/Nuxt 服务端渲染项目
✅ 定时脚本、爬虫、常驻任务脚本
✅ 小型前端静态服务托管
八、优缺点
优点
- 轻量无额外依赖,上手极简
- 开箱即用,不用复杂配置
- 原生适配 npm 项目脚本
- 生态成熟,几乎所有 Node 线上部署标配
局限
只针对 Node 程序,不能用来管理 Java、Python、Go 等其他语言后端。
九、常见配套搭配
服务器部署标准组合:
Nginx 反向代理 + PM2 托管Node项目 + 域名SSL证书
热门日志
分类
- git(9)
- Mac(7)
- C(1)
- memcache(1)
- Python(33)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- Django(4)
- ssdb(1)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(20)
- Vue(1)
- game(2)
- AI(3)
- Windows(8)
- Java(8)
- Mysql(38)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(73)
- JavaScript(40)
- Staruml(0)
- Mouth(1)
- Html(6)
- Php(102)
- Message(55)
- Lua(10)
- Compute(1)
- Redis(6)
- Nginx(13)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
- about(1)

