4. 连接池故障模式概览:连接泄漏、连接饥饿、连接超时、连接重置、连接数超限
在 Service Mesh 升级过程中,Envoy 的连接池是数据路径上的关键组件。连接池管理着上游集群的 TCP 连接与 HTTP 流,一旦出现故障,会直接表现为请求延迟增加、错误率飙升甚至服务中断。本节系统梳理五种最常见的连接池故障模式,帮助你在升级前后快速定位根因。
核心观点:连接池故障并非孤立事件,五种模式往往相互诱发。例如,连接泄漏会导致连接数超限,进而引发连接饥饿和超时;而连接重置则可能由超时或饥饿触发。排查时需从全局视角分析。
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_connections | upstream_rq_pending_total 上升 |
| HTTP 流饥饿 | 流数达到 max_requests_per_connection | upstream_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/remote | 503 (reset) | 高:HTTP/2 协议差异 |
| 连接数超限 | upstream_cx_overflow 非零 | 503 (circuit breaker) | 高:断路器默认值变化 |