PM2 崩溃恢复
在生产环境中,应用可能会由于各种原因崩溃或异常退出。为了确保应用在崩溃后能够自动恢复,PM2 提供了崩溃恢复机制。当进程崩溃时,PM2 会自动重启进程,确保应用始终保持在线。
1. 自动重启
PM2 默认启用了自动重启功能。当 Node.js 应用崩溃时,PM2 会自动尝试重新启动该进程。这样可以避免由于进程崩溃导致的服务中断,确保系统的高可用性。
示例配置
module.exports = {
apps: [
{
name: 'my-app',
script: './app.js',
watch: true, // 启用文件监控
autorestart: true, // 启用自动重启
max_restarts: 10, // 最大重启次数
restart_delay: 5000, // 崩溃后 5 秒重启
},
],
};
`
在此配置中,当 my-app 应用崩溃时,PM2 会自动重启该应用。max_restarts 设置了最大重启次数,超过该次数后应用不会继续重启。restart_delay 设置了崩溃后的重启延迟,避免频繁重启带来的系统压力。
2. 监控崩溃并重启
PM2 提供了 watch 功能,可以在文件发生变动时自动重启应用。这个功能特别适用于开发环境,但同样适用于生产环境中的崩溃恢复。如果文件系统中的某些关键文件被修改,PM2 会检测到这些变化并自动重启应用。
启用文件监控
module.exports = {
apps: [
{
name: 'my-app',
script: './app.js',
watch: true, // 启用文件监控
autorestart: true, // 启用自动重启
},
],
};
适用场景
- 适用于开发阶段,监控代码和配置文件变化。
- 适用于生产环境中的故障恢复,尤其是依赖外部文件和配置的应用。
3. 进程健康检查
在某些情况下,崩溃可能是因为应用内存泄漏、无限循环或其他异常情况。为了进一步提升崩溃恢复机制,可以使用 健康检查,定期检查应用是否正常运行。通过外部服务(如 Pingdom 或自定义脚本)来监控应用的健康状态,如果发现应用异常,可以触发重启操作。
示例:通过外部健康检查触发重启
- 创建一个健康检查脚本,检测应用是否在正常运行:
#!/bin/bash
if ! curl -s http://localhost:3000/health | grep "OK"; then
pm2 restart my-app
fi
- 使用
cron定时任务每分钟运行此脚本:
* * * * * /path/to/health-check.sh
通过这种方式,应用如果出现异常或无法响应时,会自动触发重启。
4. 平滑重启
当应用崩溃并重新启动时,平滑重启可以保证应用的连续性。在生产环境中,使用 pm2 reload 进行平滑重启,可以确保在不中断服务的情况下重启应用。
使用平滑重启
pm2 reload my-app
pm2 reload 命令会在不中断用户请求的情况下重启应用,适用于高可用的生产环境。
5. 自定义崩溃恢复策略
你可以根据实际需求,编写自定义的崩溃恢复策略。例如,监控进程的 CPU 使用率、内存消耗等,当这些资源消耗过高时,可以主动进行重启操作。
示例:基于 CPU 使用率触发重启
const pm2 = require('pm2');
pm2.connect(function (err) {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start({
name: 'my-app',
script: './app.js',
autorestart: false, // 禁用 PM2 自动重启
}, function (err, apps) {
if (err) throw err;
// 自定义逻辑:监控 CPU 使用率
setInterval(() => {
const cpuUsage = getCPUUsage(); // 假设获取 CPU 使用率的函数
if (cpuUsage > 80) {
pm2.restart('my-app', (err) => {
if (err) console.error('Restart failed');
});
}
}, 10000); // 每 10 秒检查一次 CPU 使用率
});
});
6. 总结
PM2 的崩溃恢复机制是确保 Node.js 应用高可用性的关键功能。通过合理配置自动重启、文件监控、健康检查和资源监控,可以确保应用在崩溃后迅速恢复,并保持持续稳定运行。结合平滑重启和自定义恢复策略,PM2 可以满足不同场景下的高可用性需求,帮助开发者高效地管理应用生命周期。
相关内容
- PM2 重启策略 了解 PM2 的重启策略,掌握如何根据不同的需求配置自动重启规则,如内存限制、时间限制、重启次数等,确保 Node.js 应用在异常时能自动恢复,保持高可用性。
- PM2 集群模式的优势 了解使用 PM2 集群模式的优势,如何通过负载均衡、多进程管理和高可用性提升 Node.js 应用的性能、稳定性和容错性。
- PM2 启动集群 学习如何通过 PM2 启动集群模式,以充分利用服务器的多核 CPU 提升 Node.js 应用的性能。PM2 集群模式提供了负载均衡、高可用性和自动恢复的功能,...
- PM2 应用部署 了解如何使用 PM2 进行 Node.js 应用的部署,掌握常见的部署方式、配置管理和自动化部署流程,确保应用能够在生产环境中高效、稳定地运行。
- PM2 自动化流程 掌握如何使用 PM2 配置自动化部署流程,利用 Git 集成和自定义部署脚本,实现应用的持续集成与持续部署(CI/CD),确保代码快速、安全地部署到生产环境。
- PM2 部署配置 学习如何配置 PM2 部署设置,掌握如何管理部署环境、部署步骤和自动化流程,确保 Node.js 应用在生产环境中的高效、稳定部署。