Node.js 进程管理 PM2:守护、负载均衡与日志

FreeGuideOnline 最新 2026-06-15

什么是 PM2?

PM2 是一个带有负载均衡功能的 Node.js 应用的进程守护管理器。它能够让你把 Node.js 应用持久化运行在后台,并在进程崩溃后自动重启。除此之外,PM2 还提供实时监控、日志管理和基于 Cluster 模块的内置负载均衡,是生产环境中管理 Node.js 进程的事实标准。

核心能力一览:

  • 进程守护:应用崩溃自动重启,保证服务可用性。
  • 负载均衡:利用 Node.js Cluster 模块,在多个 CPU 核心上自动扩展应用。
  • 零停机重载:更新代码后不必中断服务。
  • 日志管理:自动收集 stdout/stderr,支持日志轮转。
  • 进程监控:实时查看 CPU、内存占用和请求状态。

安装 PM2

确保已安装 Node.js 和 npm,然后全局安装 PM2:

npm install pm2 -g

安装完成后验证版本:

pm2 --version

快速启动一个 Node.js 应用

假设有一个最简单的 HTTP 服务 app.js

const http = require('http');
const port = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('Hello from PM2!\n');
});

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

使用 PM2 启动它:

pm2 start app.js --name my-app

此时应用已在后台运行,不再占用终端窗口。

核心管理命令

掌握下面几个命令,就能完成日常进程管理。

查看进程列表

pm2 list

输出包含应用名称、ID、模式(fork/cluster)、状态、CPU 和内存等信息。

停止与重启

pm2 stop my-app      # 停止应用(保留在进程列表)
pm2 restart my-app   # 重启应用
pm2 delete my-app    # 从 PM2 列表中删除应用

快速重启所有守护进程:

pm2 restart all

保存进程列表与开机自启

当服务器重启后,PM2 进程会消失。通过以下方式让 PM2 记住当前启动的应用,并设置系统自启:

pm2 save               # 保存当前进程快照
pm2 startup            # 生成开机自启动脚本

执行 pm2 startup 会输出一段系统命令,根据提示复制执行即可完成自启配置。

进程守护:自动重启与错误恢复

PM2 在启动应用后默认会持续监视进程状态。一旦进程发生未捕获的异常退出,PM2 会自动重启它,无需人工干预。

你可以调整重启策略,在应用中有时我们需要延迟重启或限制重启次数:

pm2 start app.js --max-restarts 5 --restart-delay 3000
  • --max-restarts:连续重启失败超过此次数后停止重启。
  • --restart-delay:两次重启之间的等待时间(毫秒)。

查看应用重启历史:

pm2 show my-app

负载均衡:集群模式

默认情况下,PM2 以 fork 模式 启动应用,只运行一个实例。对于多核 CPU 服务器,可以启用 cluster 模式 充分利用硬件资源。

启动集群模式并指定实例数:

pm2 start app.js -i max --name my-cluster-app
  • -i max:自动根据 CPU 核心数启动对应数量的实例。
  • 也可以指定具体数字,如 -i 4 启动 4 个进程。

PM2 基于 Node.js 的 cluster 模块自动处理请求分发,无需修改你的应用代码(只要应用是无状态的)。如果应用需要使用 WebSocket 等特性,需要配置 sticky 会话,可通过 PM2 的 --listen-timeout--kill-timeout 配合 sticky 选项实现。

查看每个实例的详情:

pm2 describe my-cluster-app

零停机重载

当更新代码后,期望不中断现有连接,可以使用 reload 代替 restart,尤其对集群模式效果显著:

pm2 reload my-cluster-app

PM2 会逐个重启每个工作进程,始终保持其他进程处理请求,从而实现平滑更新。

日志管理

PM2 自动捕获应用的 console.log 输出以及错误输出,分别保存到日志文件中。

查看日志

实时查看所有日志:

pm2 logs

仅查看某个应用的日志:

pm2 logs my-app

添加 --lines 20 可以显示最后 20 行:

pm2 logs --lines 20

清空日志:

pm2 flush

日志文件位置

默认日志存放在 ~/.pm2/logs/ 下,文件命名如:

  • my-app-out.log(标准输出)
  • my-app-error.log(错误输出)

日志轮转

生产环境日志会不断增长,需要自动分割和清理。安装 pm2-logrotate 模块:

pm2 install pm2-logrotate

安装后它会使用默认配置自动轮转,你也可以自定义参数:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true

使用配置文件

对于复杂的部署,推荐将所有配置写入一个 ecosystem.config.js 文件,便于版本控制和团队共享。

示例配置文件:

module.exports = {
  apps: [{
    name: 'api-server',
    script: './app.js',
    instances: 'max',
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    error_file: './logs/api-error.log',
    out_file: './logs/api-out.log',
    merge_logs: true,
    log_date_format: 'YYYY-MM-DD HH:mm Z',
    max_restarts: 10,
    restart_delay: 4000
  }]
};

然后通过下面命令一键启动:

pm2 start ecosystem.config.js

实时监控与仪表盘

在终端中查看带彩色图表的实时监控面板:

pm2 monit

也可以使用基于 Web 的监控工具 pm2-web 或 PM2 官方的 Keymetrics 服务进行远程监控。

总结

PM2 将 Node.js 应用的进程管理从简单的 nohup node app.js & 提升到了企业级水平。通过本教程你应该已经掌握了:

  • 如何安装和启动 PM2
  • 使用守护特性保障应用永不宕机
  • 配置集群模式实现负载均衡
  • 管理日志并进行自动轮转
  • 用配置文件管理多应用部署

将这些实践应用到你的项目中,可以大大提高 Node.js 服务的稳定性和可维护性。