一个慢接口引发的雪崩:Dubbo 超时 + 默认重试,把流量放大了 3 倍
下游一个慢接口,叠加 Dubbo 超时与默认 retries=2(最多调 3 次),流量被放大、provider 200 线程被占满并报 Thread pool is EXHAUSTED,故障从一个服务扩散到整条链路。附排查命令、超时分层、集群容错与限流降级的修法。
从一个关键词,发现新的思路。
下游一个慢接口,叠加 Dubbo 超时与默认 retries=2(最多调 3 次),流量被放大、provider 200 线程被占满并报 Thread pool is EXHAUSTED,故障从一个服务扩散到整条链路。附排查命令、超时分层、集群容错与限流降级的修法。
积分服务变慢,订单服务接口全部超时,CPU 却只有 5%。jstack 看到 200 个 Tomcat 线程都阻塞在 socket read 与连接池里,根因是没设超时、队列无界、没有隔离。附拒绝策略与超时、舱壁隔离的落地写法。
接口大面积报 Connection is not available, request timed out after 30000ms。用 Hikari 日志、show processlist 与 jstack 交叉验证,找出事务里调远程接口占着连接的元凶,并讲清 maximumPoolSize 的公式、leakDetectionThreshold 与指标告警。
从 ThreadPoolExecutor 的执行流程讲到生产环境线程池打满的完整排查链路:核心参数怎么算、JUC 常用组件怎么选、Executors 为什么不能用、CompletableFuture 默认线程池的坑,以及一次千万级短信发送任务把线程池压满的真实复盘。