字节笔记本

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 python

CoffeeScript

bash
$ pm2 start my_app.coffee

0 秒停机重载

这项功能允许你重新载入代码而不用失去请求连接。

注意事项:

  • 仅能用于 Web 应用
  • 需要运行于 Node 0.11.x 及以上版本
  • 需要运行于 cluster 模式(默认模式)
bash
$ pm2 reload all

进程监控

pm2 list

列出由 PM2 管理的所有进程信息,包括进程状态、重启次数、CPU 和内存占用等。还会显示一个进程被启动多少次(因为未处理的异常导致的重启)。

pm2 monit

监视每个 Node 进程的 CPU 和内存使用情况,提供实时可视化监控界面。

配置文件方式

除了命令行参数,PM2 还支持通过 JSON 配置文件管理进程。创建一个 app.jsonecosystem.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 save

pm2 save 会将当前进程列表保存下来,下次启动时自动恢复。

分享: