记一次线上dubbo服务超时和线程池满问题排查
线上某dubbo服务A调用dubbo服务B的接口X方法,调用端A日志中出现了很多超时的情况,提供端B该接口X超时时间设置为60s;
查看提供端B的日志,报了很多线程池满的异常:
Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-10.1.5.69:20914, Pool Size: 700 (active: 700, core: 700, max: 700, largest: 700), Task: 69117 (completed: 68417), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://10.1.5.69:20914!
at com.alibaba.dubbo.common.threadpool.support.AbortPolicyWithReport.rejectedExecution(AbortPolicyWithReport.java:53) ~[dubbo-2.5.4.2.jar:2.5.4.2]
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821) [na:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372) [na:1.7.0_79]
服务B部署了4个节点,仅1个节点有线程池满情况;
服务B的dubbo配置如下,线程池固定700个线程:
<dubbo:protocol name="dubbo" port="xxx" dispatcher="all" threadpool="fixed" threads="700" />
通过ps aux | grep 服务B的jmx端口号,查到进程pid;
通过jstack pid > jstatck.log dump出jstack日志文件;
vi打开该文件,搜索BLOCKED关键字:
"DubboServerHandler-10.1.5.69:20914-thread-134" daemon prio=10 tid=0x00007f32fc033000 nid=0x4e36 waiting for monitor entry [0x00007f32e8f31000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:112)
- waiting to lock <0x0000000780066ae0> (a org.apache.tomcat.jdbc.pool.DataSource)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
发现是很多的线程是阻塞在获取数据库连接;
工程使用了阿里开源的druid数据库连接池,获取连接超时时间设置的30s;
X方法并没有查询数据库,而是服务B中的其它方法查询了数据库;
那么线程池满原因大概清楚了:当其它服务调用服务B中查询数据库的方法,因方法获取连接超时,线程处理速度慢所以逐渐堆积,最终导致线程池满。
服务B使用了阿里云的RDS数据库,4个节点仅一个节点连接超时。而之前连接都是正常的。
跟运维同学反馈沟通,工程中配置的数据库连接用的ip,通过VPN做了路由转发的。
昨天下午该节点虚拟机维护,关闭并重启过;检查发现路由规则配置,没有设置开机启动;
配置规则,并添加到开机启动。
问题解决:)
------------------------------------------------------------------------------------------------------------------------------
参考:
dubbo Thread pool is EXHAUSTED-故障排除 https://blog.csdn.net/lsm135/article/details/77712130
Dubbo线程池耗尽异常原理分析RejectedExecutionException:Thread pool is EXHAUSTED https://www.aliyun.com/jiaocheng/791713.html
dubbo线程池溢出解决 https://blog.csdn.net/shaoyingchendsg/article/details/77551159
记一次线上dubbo服务超时和线程池满问题排查的更多相关文章
- 解Bug之路-记一次线上请求偶尔变慢的排查
解Bug之路-记一次线上请求偶尔变慢的排查 前言 最近解决了个比较棘手的问题,由于排查过程挺有意思,于是就以此为素材写出了本篇文章. Bug现场 这是一个偶发的性能问题.在每天几百万比交易请求中,平均 ...
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- 【转】java线上程序排错经验2 - 线程堆栈分析
前言 在线上的程序中,我们可能经常会碰到程序卡死或者执行很慢的情况,这时候我们希望知道是代码哪里的问题,我们或许迫切希望得到代码运行到哪里了,是哪一步很慢,是否是进入了死循环,或者是否哪一段代码有问题 ...
- 记一次线上服务CPU 100%的处理过程
告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误.查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%. 赶紧从会上下来,SSH登录 ...
- 记一次线上coredump事故
1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发生在业务低峰期,而且该模块提供的功能也不是核心流程功能,所以对线上业务影响比较小.发生coredump后,运维收到 ...
- 关于dubbo服务超时的讨论
呵呵,偷点懒,直接把QQ上的讨论发下来. huxin 10:35:19你们现在超时了是咋办的,首先超时了,回复用户肯定是要的 huxin 10:36:14超时了用户实际是不知道这业务是成功还失败了 ...
- Dubbo服务超时
服务消费者引用服务提供者的服务时可能由于网络原因导致长时间未返回相应,此时大量的线程将会阻塞,引起性能下降等问题.可以通过引入服务超时来解决该问题 服务超时指服务在给定的时间内未返回相应将立即终止该请 ...
- 记一次线上事故的JVM内存学习
今天线上的hadoop集群崩溃了,现象是namenode一直在GC,长时间无法正常服务.最后运维大神各种倒腾内存,GC稳定后,服务正常.虽说全程在打酱油,但是也跟着学习不少的东西. 第一个问题:为什么 ...
- 使用Dump转储文件排查线上环境服务未知问题
利用Dump转储文件获取正式环境程序堆栈状态 服务异常找不到原因时,我们通常通过重新启动服务来尝试解决问题,但是在决定重启之前,请不要立刻重启Windows服务或站点 重启服务会让当前案发现场的内存证 ...
随机推荐
- Server 2012使用Windows PowerShell cmdlet安装角色和角色服务功能
Server 2012使用Windows PowerShell cmdlet安装角色和角色服务功能 Windows Server 2012 安装 SQL server 2008 出现了如下错误: 解 ...
- CentOS7使用yum安装mysql5.7
提前说一下,网速不好不要用yum安装,等得时间太长. 第一步.获取yum源 [root@youxi1 ~]# rpm -ivh https://repo.mysql.com/yum/mysql-5.7 ...
- JAVA WEB开放中的编码问题
1.getParamter获取GET方式传来的中文参数乱码 场景:A B 两端都为JAVA 所有编码都为UTF-8.GET得到的参数是乱码 原因,getParamter会将中文参数先URLDECODE ...
- 利用工具破解HTTP身份验证的多种方法
https://www.hackingarticles.in/multiple-ways-to-exploiting-http-authentication/ 1)场景 利用Apache配置HTTP验 ...
- 神经网络(NN)实现多分类-----Keras实现
IRIS数据集介绍 IRIS数据集(鸢尾花数据集),是一个经典的机器学习数据集,适合作为多分类问题的测试数据,它的下载地址为:http://archive.ics.uci.edu/ml/machi ...
- 最新 竞技世界java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.竞技世界等10家互联网公司的校招Offer,因为某些自身原因最终选择了竞技世界.6.7月主要是做系统复习.项目复盘.Leet ...
- [LuoguP1264]K-联赛_网络流
K-联赛 题目链接:https://www.luogu.org/problem/P1264 数据范围:略. 题解: 首先,枚举所有球队是否作为答案是必须的. 因为发现$n$实在是特别小,很容易想到网络 ...
- 1.3.4 Fork/Join框架
package com.study.forkjoin; import java.util.ArrayList; import java.util.List; import java.util.conc ...
- Windows32或64位下载安装配置Spark
[学习笔记] Windows 32或64位下载安装配置Spark:1)下载地址:http://spark.apache.org/downloads.html 马克-to-win @ 马克java社区: ...
- 数据结构与算法之排序算法(python实现)
1.冒泡排序 冒泡排序的原理是依次比较相邻的两个数,如果前一个数比后一个数大则交换位置,这样一组比较下来会得到该组最大的那个数,并且已经放置在最后,下一轮用同样的方法可以得到次大的数,并且被放置在正确 ...