Dubbo thread pool is exhausted解决

问题背景

今天下午,突然收到nginx告警邮件,线上服务的web有N多的错误.

1. 打开监控平台一看,http的接口都超时了,最厉害的超时20秒了. 
2. 立马登录web服务查看, 日志访问情况, 打开一看, 发现很多调用dubbo服务超时.
3. 初步定位是dubbo超时的问题
4. 登录dubbo服务机器查看日志,果然在报异常:thread pool is exhausted, dubbo线程池耗尽

解决步骤

第一步

立马保存现场, jstack pid > dump.log 保存线程日志,为了之后排查问题.

第二步

查看web日志的时候,发现是某个xxxService dubbo服务超时,发现这个dubbo服务,consumer端没有设置超时时间.立马设置为5秒,重新发布
dubbo超时时间的优先级可以查看http://dubbo.io/User+Guide-zh.htm官网

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。


    image.png
第三步

xxxService服务提供方,dubbo线程池的数据设置到500, 默认是200个
<dubbo:protocol threads="500"> 重新发布. 观察日志.
刚发布的时候, 还在报thread pool is exhausted错误. 立马让运维紧急扩容了2台dubbo服务机器. 观察2-3分钟,告警解除.

第四步

查看dump.log日志文件,发现线程为WAIRING状态的日志, 查看是代码有调用redis的缓存超时,伦理上redis应该是很快返回,但是线上出现了大量超时,导致dubbo服务超时.初步判断是这个问题,找到redis的中间件团队,升级redis到最新,我用的实在是太老的版本,已经不维护了.增加redis的连接数,重新发布dubbo服务机器到线上.

到目前为止, 线上运行正常,观察几天再说.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0 准备 安装注册中心:Zookeeper、Dubbox自带的dubbo-registry-simple;安装Du...
    七寸知架构阅读 14,112评论 0 88
  • 母亲节快到了,谈谈母亲。歌颂母爱的文章很多,就不凑热闹了。通过《韦尔奇自传》,了解杰出企业家母亲的教育经。 韦尔奇...
    支策阅读 605评论 0 2
  • 这次出门,三十年前在一起学艺的邓师兄也来了。 本来用不着他的,毕竟他已到另一个部分任工头了,但按合同,进厂的人实在...
    漳平老顽童阅读 192评论 0 0
  • 遇到这个名字,你会想啥叫真自由,我现在就挺自由的啊,想干嘛干嘛,可是你真的自由么,你确定你想干嘛的时候就干嘛么?当...
    北风一叶阅读 279评论 1 0
  • 栀子花花语:永恒的爱,一生的守候——题记 (一) ...
    天降药师阅读 413评论 2 0

友情链接更多精彩内容