PM2: Node.js 进程管理

发布时间: 更新时间: 总字数:1167 阅读时间:3m 作者:IP:上海 网址

PM2 (Process Manager 2) 是 Node.js 应用程序的一个带有内置负载均衡器的生产级进程管理器

PM2 的核心特性

  1. 后台运行 (Daemonize):即使关闭 SSH 终端,Node.js 应用也会继续在后台运行。
  2. 崩溃自动重启 (Auto-Restart):如果应用因为意外错误崩溃(Crash),PM2 会瞬间将其重新启动,保证服务不中断。
  3. 集群模式 (Cluster Mode):Node.js 默认是单线程的。PM2 可以一键开启集群模式,利用服务器的多核 CPU 提高并发处理能力,且内置了负载均衡。
  4. 零停机重载 (Zero-downtime Reload):在更新代码后,可以在不中断现有用户连接的情况下重新加载应用。
  5. 开机自启 (Startup Scripts):服务器重启后,PM2 可以自动拉起所有应用。
  6. 日志管理 (Log Management):统一收集并管理 console.logconsole.error 输出的信息。
  7. 终端监控面板 (Monit):提供一个基于终端的图形化监控界面,可以实时查看 CPU 和内存占用。

如何安装

通过 npm 将 PM2 全局安装,因为它是作为一个系统级工具来管理进程的:

bash
npm install pm2 -g

(安装完成后,可以通过 pm2 -v 检查版本)

常用基础命令

假设 Node.js 入口文件是 app.js

启动应用

bash
# 最基础的启动
pm2 start app.js

# 启动并给进程命名(推荐,方便后续管理)
pm2 start app.js --name `my-api`

# 启动并监听文件变化(代码修改后自动重启,适合开发环境)
pm2 start app.js --watch

查看和监控

bash
# 列出所有由 PM2 管理的进程状态
pm2 list    # 或 pm2 ls

# 实时查看终端仪表盘(CPU、内存、请求等)
pm2 monit

# 查看特定应用的详细信息
pm2 show `my-api`  # 或者用进程的 ID: pm2 show 0

停止、重启和删除

bash
# 停止应用
pm2 stop `my-api`   # 也可以是进程 ID,例如 pm2 stop 0
pm2 stop all        # 停止所有应用

# 重启应用
pm2 restart `my-api`
pm2 restart all

# 零停机重载(生产环境推荐使用 reload 代替 restart)
pm2 reload `my-api`

# 把应用从 PM2 的管理列表中删除
pm2 delete `my-api`
pm2 delete all

日志管理

bash
# 查看所有应用的实时日志
pm2 logs

# 查看指定应用的日志
pm2 logs `my-api`

# 查看特定行数的历史日志
pm2 logs --lines 100

进阶与生产环境用法

开启多核集群模式 (Cluster Mode)

如果有一台 8 核的服务器,可以用以下命令让应用跑满 8 个核心,PM2 会自动把访问请求分发给各个核心:

bash
# -i max 表示启动与 CPU 核心数相同的实例数量
pm2 start app.js -i max

配置文件部署 (Ecosystem File)

在管理多个应用或者需要配置环境变量时,命令行参数会变得非常长。PM2 支持使用配置文件管理:

bash
# 生成配置文件 ecosystem.config.js
pm2 init

配置文件示例 (ecosystem.config.js):

javascript
module.exports = {
  apps: [
    {
      name: `my-api`,
      script: `./app.js`,
      instances: `max`, // 集群模式
      exec_mode: `cluster`,
      env_production: {
        NODE_ENV: `production`,
        PORT: 8080
      }
    }
  ]
};

配置好后,只需一条命令即可根据配置文件启动:

bash
pm2 start ecosystem.config.js --env production

设置开机自启

为了防止服务器突然断电重启导致服务挂掉,可以设置开机自启:

bash
# 1. 生成并在终端输出一段启动脚本(需复制粘贴执行)
pm2 startup

# 2. 保存当前在运行的进程列表
pm2 save

(以后每次新增或删除了常驻进程,都记得运行一次 pm2 save)

总结

在本地开发时,我们通常用 nodenodemon;而在将 Node.js 项目部署到真实的生产服务器时,PM2 是必不可少的标准配置。它让应用的运行更加健壮、高效且易于维护。