PM2 进程守护
在生产环境中,确保 Node.js 应用长期稳定运行是至关重要的。PM2 提供了强大的进程守护功能,帮助你在应用崩溃、重启或服务器重启时,自动恢复应用,最大化减少应用的停机时间。
1. 什么是进程守护?
进程守护是指通过自动监控和重启应用,确保应用在出现崩溃或异常时,能够被快速恢复。PM2 的进程守护功能使得你的应用即使在遇到问题时也能自动重启,保障应用持续稳定地运行。
2. 启用进程守护
在 PM2 中,所有应用都默认启用进程守护功能。只需启动应用,PM2 就会自动监控应用的进程,并在应用崩溃或被杀死时,自动重启。
启动应用并启用守护
使用以下命令启动应用:
pm2 start app.jsPM2 会自动监控应用进程,并在应用崩溃时进行重启。你可以通过 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 都提供了灵活且强大的进程守护功能,帮助你轻松管理生产环境中的应用。