字
字节笔记本
2026年3月22日
PM2 使用介绍
这篇文章将介绍 PM2——一个带有负载均衡功能的 Node.js 应用进程管理器,涵盖其安装、核心命令、多种启动方式及 0 秒停机重载等特性,帮助开发者实现 Node 应用的生产级进程管理。
简介
PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。它可以让你的独立代码利用服务器上的所有 CPU,并保证进程永远都活着,支持 0 秒停机重载。PM2 非常适合 IaaS 架构,但不建议用于 PaaS 方案。
关于云服务模式:SaaS(软件即服务)面向应用型用户,如 Gmail;PaaS(平台即服务)面向开发型用户,如 GAE;IaaS(基础架构即服务)如 AWS,对于不确定应用规模的创业公司非常有用。
主要特性
- 内建负载均衡:使用 Node cluster 集群模块
- 后台运行:进程在后台持续运行
- 0 秒停机重载:维护升级时无需停机
- 启动脚本:支持 Ubuntu 和 CentOS 的 init 脚本
- 进程守护:停止不稳定的进程,避免无限循环
- 控制台监控:实时查看进程状态和资源占用
- HTTP API:提供远程控制和实时接口 API(Node.js 模块,允许与 PM2 进程管理器交互)
测试过 Node.js v0.11/v0.10/v0.8 版本,兼容 CoffeeScript,基于 Linux 和 MacOS。
安装
bash
npm install -g pm2基础用法
bash
$ pm2 start app.js -i 4 # 后台运行 pm2,启动 4 个 app.js 进程
$ pm2 start app.js --name my-api # 命名进程
$ pm2 list # 显示所有进程状态
$ pm2 monit # 监视所有进程
$ pm2 logs # 显示所有进程日志
$ pm2 stop all # 停止所有进程
$ pm2 restart all # 重启所有进程
$ pm2 reload all # 0 秒停机重载进程(用于 NETWORKED 进程)
$ pm2 stop 0 # 停止指定的进程
$ pm2 restart 0 # 重启指定的进程
$ pm2 startup # 产生 init 脚本保持进程活着
$ pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0 # 杀死指定的进程
$ pm2 delete all # 杀死全部进程运行进程的不同方式
Cluster 模式(默认)
bash
$ pm2 start app.js -i max # 根据 CPU 核心数启动最大进程数
$ pm2 start app.js -i 3 # 启动 3 个进程传递 max 参数时,PM2 会自动检测服务器 CPU 核心数并启动对应数量的进程,实现负载均衡。
Fork 模式
bash
$ pm2 start app.js -x # 用 fork 模式启动 app.js
$ pm2 start app.js -x -- -a 23 # fork 模式启动并传递参数 (-a 23)
$ pm2 start app.js --name serverone # 启动进程并命名
$ pm2 stop serverone # 按名称停止进程
$ pm2 start app.json # 使用配置文件启动
$ pm2 start app.js -i max -e err.log -o out.log # 启动并设置日志输出其他语言支持
Fork 模式还支持运行非 Node.js 应用:
bash
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter pythonCoffeeScript
bash
$ pm2 start my_app.coffee0 秒停机重载
这项功能允许你重新载入代码而不用失去请求连接。
注意事项:
- 仅能用于 Web 应用
- 需要运行于 Node 0.11.x 及以上版本
- 需要运行于 cluster 模式(默认模式)
bash
$ pm2 reload all进程监控
pm2 list
列出由 PM2 管理的所有进程信息,包括进程状态、重启次数、CPU 和内存占用等。还会显示一个进程被启动多少次(因为未处理的异常导致的重启)。
pm2 monit
监视每个 Node 进程的 CPU 和内存使用情况,提供实时可视化监控界面。
配置文件方式
除了命令行参数,PM2 还支持通过 JSON 配置文件管理进程。创建一个 app.json 或 ecosystem.config.js 文件:
json
{
"apps": [
{
"name": "my-app",
"script": "app.js",
"instances": "max",
"exec_mode": "cluster",
"env": {
"NODE_ENV": "production"
}
}
]
}启动:
bash
$ pm2 start app.json开机自启动
通过 startup 命令生成系统启动脚本,确保服务器重启后 PM2 进程自动恢复:
bash
$ pm2 startup
$ pm2 savepm2 save 会将当前进程列表保存下来,下次启动时自动恢复。
分享: