You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache反向代理下Node.js应用随机崩溃报503 PM2未自动重启问题咨询

故障排查与解决方案

1. 校验PM2自动重启配置

绝大多数PM2不自动重启的问题都由参数配置错误导致:

  • 执行pm2 show <你的应用ID/名称>查看当前配置,重点核对autorestart是否为true、restart count是否已经达到max restarts的阈值
  • 如果配置异常,重新启动应用时补充参数:pm2 start <入口文件.js> --name <自定义应用名> --autorestart true --max-restarts 0 --min-uptime 5000,其中max-restarts=0代表不限制重启次数,min-uptime=5000代表进程启动5秒后崩溃才计入异常重启次数,避免启动即崩溃的场景短时间触发PM2的停止保护
  • 可额外添加--max_memory_restart 500M参数,进程占用内存超过阈值时自动重启,提前规避内存溢出问题

2. 补全进程异常捕获逻辑

你当前无报错日志的核心原因是代码未捕获全局异常,Node.js遇到未处理的同步异常、异步Promise拒绝时会直接终止进程,报错信息容易丢失。在你的Node.js入口文件最开头添加以下代码:

// 捕获未处理的同步异常
process.on('uncaughtException', (err) => {
  console.error('未捕获全局异常:', err.stack || err);
  process.exit(1);
});
// 捕获未处理的异步Promise rejection
process.on('unhandledRejection', (reason, promise) => {
  console.error('未处理Promise拒绝:', promise, '错误原因:', reason.stack || reason);
});

配置完成后重启PM2,下次进程崩溃后执行pm2 logs --err <应用名>即可拿到具体报错信息,根因大概率出在你引入的两个路由文件中,比如未加try/catch的数据库请求错误、第三方接口调用异常等。

3. 排查系统级进程终止原因

如果依旧无报错日志,基本可以确定是VPS系统主动终止了Node进程:

  • 执行dmesg | grep -i kill查看系统日志,如果存在Out of memory: Killed process <PID> (node)类的记录,说明是VPS内存不足触发了OOM Killer主动杀进程,该场景下PM2不会留存相关日志
  • 若确认是OOM问题,要么升级VPS内存配置,要么优化代码内存泄漏问题(常见原因有数据库连接未释放、全局变量未清理、大文件读写未释放内存)

4. 优化日志留存配置

  • 执行pm2 install pm2-logrotate安装PM2日志滚动插件,避免日志体积过大被自动清理导致丢失报错信息
  • 执行pm2 startup按提示完成操作后再执行pm2 save,配置PM2开机自启,避免VPS重启后服务未拉起的问题

临时兜底方案

如果暂时无法定位根因,可以先配置自动重启规则兜底,保证服务崩溃后自动恢复,后续抓到报错后再修复根源问题。

内容的提问来源于stack exchange,提问作者Paul Serre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:12:01