点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!! 某日上午,收到业务侧反馈,业务无法正常提供服务,监控中出现大面积异常。宝兰德工程师收到反馈后,立即针对异常进行排查,发现数据源连接中出现大量等待请求,并且数据源创建连接数不再进行变化,疑似数据源连接卡死。
进入服务器,对异常实例抓取线程堆栈,通过分析得知,线程中出现阻塞,阻塞原因为数据源请求连接,在获取同一个锁。根据线程堆栈及宝兰德中间件内部机制,线程数、连接数,需要等比例配置综合分析,除宝兰德中间件已明确配置监听请求处理线程外,应用中多个场景存在自行构建并发线程获取数据库链接进行请求处理的情况。但因业务逻辑的复杂性会在同一请求处理中获取多个数据库连接进行数据库查询或更新操作,业务特性要求全部数据库操作完成后,才释放数据库连接,当业务请求获取数据库连接数因未获取足够数据库连接数,无法完成请求处理,长时间占用数据库连接,造成BES中间件数据源连接池资源耗尽的现象。
协调宝兰德研发人员远程支持,在测试服务器中,抓取宝兰德、weblogic中的线程堆栈,进行对比排查。
研发人员提供验证补丁,提供类似Webloigc线程数调自调节能力,但因无法获取到故障应用场景的自建线程数据,导致补丁未竟全功。经过多次压测排查,定位对比,再次对补丁进行调整。研发人员再次提供补丁,进行压测排查,在压测过程中,发现异常报错为:ORA-00942: table or view does not exist。已反馈用户,排查异常原因。故障预期解决办法:
针对连接卡死的现象,宝兰德中间件提供优化补丁,通过优化共享连接、自调节线程数,来修复该问题。