Dubbo线程池你不得不会的知识

本文记录了一次线上Dubbo服务出现调用超时的问题排查过程。经过分析,发现超时并非由于代码阻塞或数据访问层异常,而是由于线程池耗尽导致。在Dubbo 2.8.6版本中,线程池耗尽时服务端不会返回错误信息,而在2.6.2版本中会返回'线程池耗尽'的错误。通过压测验证了这一猜想。最后给出了合理设置线程池大小、超时时间以及确保接口有返回值的避坑建议。
摘要由CSDN通过智能技术生成

问题描述

线上突然出现Dubbo超时调用,时间刚好为Consumer端设置的超时时间。
有好几个不同的接口都报超时了
第1次调用超时,第2次(或第3次)重试调用非常快(正常水平)
Dubbo调用超时的情况集中出现了3次,每次都是过一会自动恢复

排查

排查日志
看到调用超时,首先就拿着traceId去服务提供方查日志。 奇怪的是,在服务提供方的业务日志里面,只有正常的调用日志(耗时正常),没有超时调用的日志。 从正常的调用日志里面看,一切都是正常的,看不出所以然。 给人的感觉就是超时那次请求的调用没有达到服务提供方。

此时系统活动情况
通过系统历史监控,我们发现除了gc比平时稍微高一点外(也在正常水位),没有其他的异常;CPU、内存、网络等指标都在正常范围。

查看Dubbo线程活动情况
第2次系统集中超时报警的做的第一件事就是登录到那台服务器查看dubbo线程活动情况:看下能不能找到阻塞在哪一行代码。很遗憾,所有的dubbo线程都没有阻塞,都是正常的WAITING状态。

并没有明显表明阻塞在某段代码,这可难倒我们了:如果没有阻塞的话,为什么dubbo调用方会报超时?继续看代码

该接口是否存在阻塞的代码?
硬着头皮重新看代码每一个分支,突然发现底层的一个方法中有http调用!会不会是这个http调用导致的超时?如果是的话,那么不同的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值