PM2 进程守护

在生产环境中,确保 Node.js 应用长期稳定运行是至关重要的。PM2 提供了强大的进程守护功能,帮助你在应用崩溃、重启或服务器重启时,自动恢复应用,最大化减少应用的停机时间。

1. 什么是进程守护?

进程守护是指通过自动监控和重启应用,确保应用在出现崩溃或异常时,能够被快速恢复。PM2 的进程守护功能使得你的应用即使在遇到问题时也能自动重启,保障应用持续稳定地运行。

2. 启用进程守护

在 PM2 中,所有应用都默认启用进程守护功能。只需启动应用,PM2 就会自动监控应用的进程,并在应用崩溃或被杀死时,自动重启。

启动应用并启用守护

使用以下命令启动应用:

pm2 start app.js

PM2 会自动监控应用进程,并在应用崩溃时进行重启。你可以通过 pm2 status 查看应用的运行状态,确认进程守护是否生效。

示例

pm2 status

输出示例:

┌─────┬──────────────┬────────┬───┬──────┬────────┬───┬─────────────┬─────────────┐
│ id  │ name         │ mode   │ ↺ │ status│ cpu    │ memory │ uptime     │
├─────┼──────────────┼────────┼───┼──────┼────────┼───┼─────────────┼─────────────┤
│ 0   │ my-app       │ fork   │ 3 │ online│ 0.5%   │ 50MB  │ 1h          │
└─────┴──────────────┴────────┴───┴──────┴────────┴───┴─────────────┴─────────────┘

其中, 列表示应用的重启次数,每次应用崩溃并被 PM2 重启时,这个数字会增加。

3. 自动重启策略

PM2 提供了多种进程守护策略,你可以根据应用的实际需求设置不同的自动重启规则。

配置文件中的自动重启设置

你可以通过 ecosystem.config.js 配置文件来设置应用的自动重启策略。以下是常见的配置选项:

  • restart_delay:应用崩溃后重启的延迟时间,防止频繁重启导致资源浪费。
  • max_restarts:限制应用在一定时间内的最大重启次数,避免因错误引发过多重启。
  • watch:启用文件监控,应用文件发生变化时自动重启。

例如:

module.exports = {
  apps: [
    {
      name: 'my-app',
      script: './app.js',
      restart_delay: 5000,   // 崩溃后 5 秒钟重启
      max_restarts: 10,      // 限制最多重启 10 次
      watch: true,           // 启用文件监控
    },
  ],
};

配置文件中的设置将帮助你定制进程守护的行为。

手动设置重启延迟

如果你希望在应用崩溃后,延迟一定时间再重启,可以使用 --restart-delay 选项。例如:

pm2 start app.js --restart-delay 5000

这将使得应用在崩溃后等待 5 秒钟才重新启动,减少系统的压力。

4. 崩溃恢复和系统重启

除了自动重启,PM2 还支持在系统重启时自动恢复应用进程。你可以使用 pm2 startup 命令生成启动脚本,使得 PM2 在服务器重启后自动启动并恢复应用。

启动脚本生成

在 Linux 或 macOS 上,运行以下命令:

pm2 startup

该命令会生成一个启动脚本,根据你的操作系统配置自动启动 PM2 和它管理的应用。生成脚本后,保存进程列表:

pm2 save

这将保存当前所有运行的进程,确保系统重启后,PM2 会自动恢复应用进程。

5. 查看进程守护状态

你可以随时通过 pm2 show 命令查看应用的守护状态及其配置:

pm2 show my-app

输出中会列出有关进程守护的详细信息,如进程 ID、状态、重启策略等。

6. 结语

PM2 的进程守护功能能够确保你的 Node.js 应用在生产环境中高可用、稳定运行。通过自动重启和系统重启后的恢复机制,PM2 能够最大程度地减少停机时间,确保用户在访问时不受影响。

无论是通过简单的命令启动应用,还是通过配置文件进行高级设置,PM2 都提供了灵活且强大的进程守护功能,帮助你轻松管理生产环境中的应用。