全局异常处理需分层捕获致命异常:Web层用@ExceptionHandler(Error.class),非Web层设Thread.setDefaultUncaughtExceptionHandler,JVM级结合监控前置告警;告警须带服务名、IP、PID、异常类型、内存率、错误频次及traceId,并异步熔断脱敏。

全局异常处理中结合告警系统捕获致命系统异常,关键不是“等它崩了再通知”,而是提前识别、精准拦截、快速响应。重点在于区分“可恢复异常”和“真正致命异常”,避免告警泛滥,同时确保核心故障不被遗漏。
明确哪些算致命系统异常
致命异常不是所有 ERROR 日志,而是直接威胁服务可用性或数据一致性的底层崩溃信号:
-
OutOfMemoryError、StackOverflowError、NoClassDefFoundError(类加载失败) -
ThreadDeath、VirtualMachineError及其子类 - 数据库连接池彻底耗尽且无法重建、Redis 全链路超时、消息队列消费线程批量死锁
- 定时任务线程池拒绝新任务、WebSocket 连接管理器空指针导致广播中断
这类异常往往不走常规业务流程,容易绕过 @ControllerAdvice,必须多层设防。
分场景配置捕获入口,不依赖单一机制
只靠 @ExceptionHandler(Exception.class) 会漏掉很多致命问题,需组合使用:
-
Web 层兜底:
@RestControllerAdvice中单独捕获Error类型@ExceptionHandler(Error.class) public ResponseEntity<Result> handleFatalError(Error e) { log.error("FATAL ERROR CAUGHT: {}", e.getClass().getSimpleName(), e); alertService.sendCriticalAlert(e); // 同步记录 + 异步发钉钉/电话 return Result.fail(503, "服务暂时不可用"); } -
非 Web 场景补位:设置 JVM 级别未捕获异常处理器
Alibabacloud Sdk Client Initialization For Java下载在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Thread.setDefaultUncaughtExceptionHandler((t, e) -> { if (e instanceof Error) { log.error("Uncaught FATAL in thread [{}]:", t.getName(), e); alertService.sendCriticalAlert(e); } });适用于定时任务、消息监听器、异步线程池等
@ControllerAdvice触达不到的地方。 JVM 崩溃前最后一道防线:配合
registerShutdownHook检查error_get_last()(Java 不直接支持,但可通过Runtime.addShutdownHook捕获强制终止前的异常痕迹)
实际中更推荐接入 JVM 监控(如 Micrometer 暴露jvm.memory.used、jvm.threads.states),当OUT_OF_MEMORY状态持续 30 秒,自动触发告警,比等OutOfMemoryError抛出更前置。
告警发送必须带上下文,不能只发“OOM”三个字母
一次有效告警至少包含:
- 服务名 + 主机 IP + JVM PID
- 异常类型 + 简化堆栈(取前 3 行,过滤掉 JDK 内部调用)
- 当前内存使用率(通过
ManagementFactory.getMemoryMXBean()实时采集) - 最近 1 分钟内同类错误次数(用
ConcurrentHashMap缓存计数,防止刷屏) - 关联 traceId(如有)或当前时间戳(用于日志对齐)
避免告警失效的实操细节
- 钉钉/邮件客户端必须异步执行(用独立线程池),绝不能阻塞主线程或日志线程
- 告警接口要加熔断(如 Hystrix 或 Sentinel),当钉钉 Webhook 超时 3 次,自动降级为写入本地告警队列(Redis List),后续重试
- 所有告警内容做敏感脱敏:IP 自动掩码为
10.20.*.*,不传完整堆栈中的密码字段、token、密钥路径
本质上,致命异常告警不是“把错误发出去”,而是构建一个从检测、分级、去重、上下文增强到通道保底的闭环链条。它不追求 100% 拦截所有崩溃,但确保每一次真正影响服务的致命问题,都能在 30 秒内触达责任人。

















