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

升级Spring Boot2.5后指标频繁出现CancelledServerWebExchangeException问题咨询

CancelledServerWebExchangeException 异常问题说明

异常定义

CancelledServerWebExchangeException 是Spring Framework 5.3版本(Spring Boot 2.5默认依赖的Spring核心版本)新增的WebFlux专属异常,用于标记当前请求对应的ServerWebExchange实例已被取消,无法继续完成后续的请求处理/响应写入逻辑。

频繁触发的原因

  • Spring Boot 2.5之前的版本对应Spring核心版本低于5.3,没有该异常的抛出逻辑,因此升级后才会在Prometheus指标中观测到该异常的统计数据
  • 该异常的触发场景均为服务端处理请求过程中客户端主动断开连接:包括用户主动关闭页面、压测工具提前终止请求、网关/负载均衡层配置的超时时间短于服务端处理时间主动断连、TCP连接被网络设备重置等
  • 你观测到的status="200"与outcome="UNKNOWN"共存的现象符合异常触发逻辑:当异常抛出时,响应头已经成功写入客户端,所以实际返回状态码为200,响应内容也完整送达;但Micrometer的指标采集逻辑捕获到请求处理链中抛出了未处理的异常,无法匹配正常的请求结果分类,因此标记为UNKNOWN

你提到的示例指标属于典型的触发场景:

http_server_requests_seconds_count{exception="CancelledServerWebExchangeException",method="GET",outcome="UNKNOWN",status="200",uri="/actuator/health"} 137.0

本地复现逻辑说明

使用JMeter多线程压测时,压测线程的TCP连接复用、超时回收逻辑会产生大量提前断开的请求,直接触发该异常的抛出逻辑,和线上高并发场景的触发逻辑完全一致。

优化建议

  • 该异常属于正常的网络波动类异常,不会影响正常返回的请求业务逻辑,如果指标占比在可接受范围内无需额外修复
  • 如果需要消除指标统计噪音,可以自定义WebFlux全局异常处理器捕获CancelledServerWebExchangeException不向上抛出,或自定义Micometer的HTTP请求指标标签生成逻辑,过滤该异常的统计

内容的提问来源于stack exchange,提问作者Sergey Volkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:08