首页 > 系统相关 >进程还在,JSF接口不干活了,这你敢信?

进程还在,JSF接口不干活了,这你敢信?

时间:2024-06-14 10:13:16浏览次数:26  
标签:JSF 处理 接口 干活 获取 读锁 线程 日志

1、问题背景:

应用在配合R2m升级redis版本的过程中,上游反馈调用接口报错,RpcException:[Biz thread pool of provider has been exhausted],通过监控系统和日志系统定位到现象只出现在一两个节点,并持续出现。第一时间通过JSF将有问题的节点下线,保留现场,业务恢复。

报错日志如下:

24-03-13 02:21:20.188 [JSF-SEV-WORKER-57-T-5] ERROR BaseServerHandler - handlerRequest error msg:[JSF-23003]Biz thread pool of provider has been exhausted, the server port is 22003
24-03-13 02:21:20.658 [JSF-SEV-WORKER-57-T-5] WARN BusinessPool - [JSF-23002]Task:com.alibaba.ttl.TtlRunnable - com.jd.jsf.gd.server.JSFTask@0 has been reject for ThreadPool exhausted! pool:80, active:80, queue:300, taskcnt: 1067777

2、排查步骤:

从现象开始推测原因,系统启动时,会给JSF线程池分配固定的大小,当线程都在工作的时,外部流量又打进来,那么会没有线程去处理请求,此时会有上述的异常。那么JSF线程在干什么呢?

1)借助SGM打印栈信息

 

2)分析栈信息

可以用在线分析工具:http://spotify.github.io/threaddump-analyzer/

2.1)分析线程状态

通过工具可以定位到JSF线程大部分卡在JedisClusterInfoCache#getSlaveOfSlotFromDc方法,如图:

 


 

 


 

 


 

 


 

2.2)分析线程夯住的方法

getSlaveOfSlotFromDc在方法入口就需要获取读锁,同时在全局变量声明了读锁和写锁:

 


 

 


 

此时对问题有一个大体的了解,大概推测:getSlaveOfSlotFromDc是获取redis连接池,该方法入口处需要获取读锁,由于读锁之间不会互斥,所以猜测有业务获取到写锁后没有释放。同时读锁没有设置超时时间,所以导致杰夫线程处理业务时卡在获取读锁处,无法释放。

2.3)从业务的角度分析持有写锁的逻辑

向中间件研发寻求帮助,经过排查,定位到有个更新拓扑的定时任务,执行时会先获取写锁,根据该消息,定位到任务的栈信息:

 


 

代码截图:

 


 

图1

 


 

图2

 


 

图3

从日志验证:日志只打印更新拓扑的日志,没有打印更新成功的日志,且02:20分以后r2m-topo-updater就不在打印日志

 


 

2.4)深入挖掘原因

虽然现象已经可以推测出来,但是对问题的原因还是百思不得其解,难道parallelStream().forEach存在bug?难道有远程请求,没有设置超时时间?...

经过查找资料确认,如果没有指定,那么parallelStream().forEach会使用ForkJoinPool.commonPool这个默认的线程池去处理任务,该线程池默认设置(容器核心数-1)个活跃线程。同时caffeine数据过期后会异步刷新数据,如果没有指定线程池,它默认也会使用ForkJoinPool.commonPool()来执行异步线程。那么就有概率出现获取到写锁的线程无法获取执行权,获取执行权的线程无法获取到读锁。

 


 

2.5)验证

3个ForkJoinPool.commonPool-worker的确都夯在获取redis连接处,线程池的活跃线程都在等待读锁。

 


 

本地caffeine缓存没有设置自定义线程池

 


 

topo-updater夯在foreach业务处理逻辑中

 


 

3.复盘

1)此问题在特定的使用场景下才会小概率出现,非常感谢中间件团队一起协助定位问题,后续也将异步更新拓扑改为同步处理。

2)Java提供了很多异步处理的能力,但是异常处理也代表需要开启线程或者使用共用的线程池,也需要注意。

3)做好监控,能第一时间发现问题并处理问题。

标签:JSF,处理,接口,干活,获取,读锁,线程,日志
From: https://www.cnblogs.com/Jcloud/p/18247244

相关文章

  • 讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣
    文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1344元的,没有按量付费的模式,个人小开发者可买不起。 让我们跑起来玩玩,官方提供了python的sdk,下载到本地: 不想下载sdk的,我......
  • 6.13API接口服务类漏洞探针
    ip地址解析:www.x.x.x.com,对应网站目录为d:/wwwroot/xiaodi/而127.x.x.x,对应网站目录为d:/wwwroot/,可能存在网站备份文件zip,所以ip网址端口都的扫描;协议端弱口令爆破:超级弱口令检查工具;端口服务安全问题(用于无思路时)思路:利用探针对端口探测后,对口令安全、Web漏洞、中间......
  • 1688跨境是淘系对抗拼多多Temu的一把尖刀吗?|1688开放API接口接入|1688跨境代采系统搭
    1688跨境是淘系对抗拼多多Temu的一把尖刀,这一观点在电商领域内有一定的支持。1688作为阿里巴巴集团旗下的重要电商平台,长期以来专注于B2B业务,连接着大量的制造商和采购商。随着电商平台竞争的加剧,1688也在不断地进行战略调整和业务升级,尤其是在跨境电商领域的动作频频,显示出其......
  • 闲鱼商品监控:使用商品详情数据接口跟踪价格变动
    使用闲鱼商品详情数据接口跟踪价格变动在二手市场和电商领域,价格是一个重要的动态因素,它可以受到多种因素的影响,如供求关系、季节变化、市场趋势等。对于买家而言,跟踪商品价格的变动可以帮助他们抓住最佳购买时机,节省开支;对于卖家而言,合理的定价策略能够吸引更多买家,提高销售......
  • 流畅的python--第十三章 接口、协议和抽象基类
    面向对象编程全靠接口。在Python中,支撑一个类型的是它提供的方法,也就是接口。在不同的编程语言中,接口的定义和使用方式不尽相同。从Python3.8开始,有4种方式,如图13-1中的类型图所示。这4种方式概述如下。鸭子类型自Python诞生以来默认使用的类型实现方式。从第1......
  • NOAA小时气象数据和逐日气象数据检索接口
    简介本API提供了访问NOAAGlobalSurfaceSummaryoftheDay(GSOD)和NOAAIntegratedSurfaceDatabase(ISD)数据的方式。用户可以通过这些接口查询站点信息、获取国家和地区列表、检索站点列表以及获取特定站点的数据。数据更新至2023.12.31,后期会业务化更新。服......
  • MAX3160EAP 集成接口芯片 收发器 资料配置流程
    MAX3160EAP是一款集成电路(IC),它是一个全双工的RS-232/RS-485/422多协议收发器。这个器件可以通过编程来配置为不同的模式,包括两个RS-232接口或一个RS-485/422收发器。它具有许多高级特性,比如真正的安全接收器、保护传输和接收器不受线路故障的影响、低功耗待机模式以及能够在......
  • vue项目连接到后端接口
    背景后端采用的是若依springboot分离版本,前端是自己搭建的vue项目,不是若依的前端框架,需要免认证进行调用接口的话,注释掉安全认证配置中的鉴权认证,或者将接口加入白名单1.安装axiosnpminstallaxios--save2.在request.js中编写请求后端的路径,创建src/utils/request.jsimpo......
  • 运营商三要素核验-手机号实名认证接口-运营商三要素核验接口
    手机号三元素实名认证,通过手机号、真实姓名、身份证号来校验三者是否一致。支持三大运营商携号转网查询,姓名、手机号、身份证号码三项验证是否一致;服务器毫秒级响应,信息验证科学严谨,数据安全可靠。更新周期:联通T+1电信T+3移动T+3~5均为工作日更新周期:联通T+1电信T+3......
  • 用fastapi和sse创建流式输出接口
    示例为调用huggingface的大模型,使其流式输出fromfastapiimportFastAPI,RequestimportrequestsimportjsonimportosfrompydanticimportBaseModelfromtransformersimportAutoTokenizer,AutoModelForCausalLM,TextStreamer,TextIteratorStreamerfromsse_star......