process.on('uncaughtException', (err) => {
console.error('fatal', err);
process.exit(1);
});
加了一段 uncaughtException 打印堆栈之后,进程确实不退了。但接下来的请求全部返回 500,重启一次才恢复,日志里没有新的报错。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:异常抛出时可能停在任意一行,连接池、锁或者状态机都处于中间态,继续服务等于带着坏掉的状态跑。Node 官方也不建议在这个事件里恢复业务。
「uncaughtException 后状态」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:在 uncaughtException 里打完日志就退出 交给进程管理器拉起;退出前留很短的宽限 让日志刷盘;真正要兜住的是每个请求的错误 用中间件和 try/catch;把重启次数接进监控 频繁重启说明还有没找到的异常。
确认没问题再收工,故意抛一个异常后进程退出码是 1 被自动拉起 新进程的请求全部正常。
