4. 连接池故障模式概览:连接泄漏、连接饥饿、连接超时、连接重置、连接数超限

在 Service Mesh 升级过程中,Envoy 的连接池是数据路径上的关键组件。连接池管理着上游集群的 TCP 连接与 HTTP 流,一旦出现故障,会直接表现为请求延迟增加、错误率飙升甚至服务中断。本节系统梳理五种最常见的连接池故障模式,帮助你在升级前后快速定位根因。

核心观点:连接池故障并非孤立事件,五种模式往往相互诱发。例如,连接泄漏会导致连接数超限,进而引发连接饥饿和超时;而连接重置则可能由超时或饥饿触发。排查时需从全局视角分析。
连接池五种故障模式关系图 连接池五种故障模式关系图 Envoy 连接池 连接泄漏 连接饥饿 连接超时 连接重置 连接数超限 虚线箭头表示故障诱发关系:泄漏→超限→饥饿→超时→重置,形成恶性循环

4.1 连接泄漏 (Connection Leak)

连接泄漏是指连接池中的连接在使用完毕后未被正确归还到池中,导致连接对象被遗弃。在 Envoy 中,这通常表现为 upstream_cx_active 持续增长,而 upstream_cx_destroyed 远低于预期。

  • 典型原因:HTTP/2 流未正确关闭、WebSocket 连接未触发析构、自定义 Filter 未释放连接引用。
  • 升级场景:新版本 Envoy 的流处理逻辑变更,导致部分边缘 case 未覆盖。
  • 排查指标:envoy_cluster_upstream_cx_active、envoy_cluster_upstream_cx_destroyed。

4.2 连接饥饿 (Connection Starvation)

连接饥饿指所有可用连接均被占用,新请求无法获取连接而排队等待。Envoy 连接池的 max_requests_per_connection 或 max_connections 设置不当是常见诱因。

饥饿类型触发条件Envoy 指标
TCP 连接饥饿连接数达到 max_connectionsupstream_rq_pending_total 上升
HTTP 流饥饿流数达到 max_requests_per_connectionupstream_rq_pending_overflow 增加
内存饥饿连接池缓冲区耗尽upstream_cx_overflow 非零

4.3 连接超时 (Connection Timeout)

连接超时包括建立连接超时和等待空闲连接超时。Envoy 通过 connect_timeout 和 idle_timeout 控制,升级后若超时配置被覆盖或网络延迟增加,会触发大量 503/504。

排查技巧:对比升级前后的 envoy_cluster_upstream_cx_connect_timeout 和 envoy_cluster_upstream_rq_timeout 计数器。若超时集中在特定集群,检查该集群的 circuit_breakers 设置。

4.4 连接重置 (Connection Reset)

连接重置指连接被对端或 Envoy 主动关闭,表现为 RST 包。在升级过程中,新旧版本 Envoy 的协议处理差异(如 HTTP/2 的 GOAWAY 帧处理)是主要诱因。

  • 本地重置:Envoy 因资源限制主动关闭连接,对应 upstream_cx_destroy_local。
  • 远程重置:上游服务主动断开,对应 upstream_cx_destroy_remote。
  • 协议重置:HTTP/2 的 RST_STREAM 帧,对应 upstream_rq_rx_reset。

4.5 连接数超限 (Connection Limit Exceeded)

连接数超限是断路器 (Circuit Breaker) 触发的保护行为。Envoy 的断路器基于 max_connections、max_pending_requests、max_requests 和 max_retries 四个阈值。

# 典型断路器配置示例
circuit_breakers:
  thresholds:
    - priority: DEFAULT
      max_connections: 1024
      max_pending_requests: 1024
      max_requests: 1024
      max_retries: 3
    - priority: HIGH
      max_connections: 2048
      max_pending_requests: 2048
      max_requests: 2048
      max_retries: 5

当任意阈值被触发,Envoy 会直接拒绝新请求,返回 503。升级时若未同步调整断路器参数,极易触发超限。

升级避坑:Envoy 1.22+ 版本对 max_requests_per_connection 的默认值从 2^31 调整为 1024,升级后若未显式配置,高流量服务会频繁触发连接数超限。务必在升级前检查集群配置。

4.6 故障模式对比速查表

故障模式核心指标典型错误码升级关联性
连接泄漏upstream_cx_active 持续增长无直接错误码,但请求延迟增加高:流处理逻辑变更
连接饥饿upstream_rq_pending_total 高503 (overflow)中:连接池参数变更
连接超时upstream_cx_connect_timeout 增加504 (timeout)高:超时配置覆盖
连接重置upstream_cx_destroy_local/remote503 (reset)高:HTTP/2 协议差异
连接数超限upstream_cx_overflow 非零503 (circuit breaker)高:断路器默认值变化