标准答案
- 常见原因包括下游慢导致连接长时间占用、响应体未消费或未关闭、连接泄漏、连接最大寿命过长、突发并发过高和每个请求新建客户端。
- 连接池应按进程或服务实例复用,并设置合理的最大连接数、每主机连接数、空闲连接数、空闲超时和连接最大生命周期。
- 最大连接数不是越大越好,应根据下游数据库、服务实例、网络和线程池实际容量设置;过多连接会增加排队、上下文切换和雪崩风险。
- 获取连接、建立连接、读取响应和整个调用都需要超时与取消,避免请求无限等待池中连接。
- 监控池等待时间、活跃数、空闲数、创建率、超时、连接重置和下游延迟,才能区分池配置问题和依赖容量问题。
题目解析
连接池是并发闸门。它可以保护下游,但若队列无限增长,用户看到的只是越来越长的等待和超时。
HTTP/2 等协议可以在一条连接上复用多个流,但仍有并发流、服务端限制和流控边界,不能因此取消连接治理。
常见误区
- 连接池满后直接把最大连接数调到很大。
- 每次请求都创建新的 HTTP、数据库或消息客户端。
- 只设置连接建立超时,不设置获取连接和读取响应超时。