标准答案

  1. 记录错误、请求标识和版本后,通常停止接收新流量并让进程退出,由进程管理器重启。
  2. 退出前只做有界的日志冲刷和资源关闭,不能在异常状态下继续处理复杂业务。
  3. 所有 Promise 和 callback 都应在业务边界处理,降低未处理错误成为常态的可能。
  4. 重启策略要配合健康检查、幂等、优雅停机和启动退避,避免重启风暴。

题目解析

uncaughtException 和 unhandledRejection 表示进程中存在没有被业务边界处理的错误。全局监听器适合记录上下文、停止接流量和触发受控退出,不适合把未知状态的进程当作健康实例继续服务。

退出前只做有界的日志冲刷、连接关闭和任务状态保存。重复执行补偿可能制造第二次副作用,应该把结果交给幂等状态或重启后的恢复流程。

进程管理器的重启还要有退避、最大重启频率、健康检查和崩溃告警。否则代码错误会变成重启风暴,日志和下游请求进一步放大故障。

常见误区

  • 误区:监听事件后继续无条件提供流量。改正:把未处理错误视为不可信状态,停止接流量并受控退出。
  • 误区:在全局 handler 里重复执行业务补偿。改正:只做取证和止损,业务恢复依靠持久化状态、幂等和专门补偿。
  • 误区:没有防止进程反复崩溃重启。改正:设置启动退避、重启上限、健康检查和告警。

作者信息