应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

MQJDKBug导致线程阻塞案例分析

  背景介绍业务介绍
  在某学习APP浏览文章,客户端会将浏览的文章信息上传到服务端,服务端将浏览信息最终存储到HBase;
  在某学习APP首页点击【我的】【历史】,会展示用户浏览文章的历史记录。技术介绍
  服务端的服务是【阅读历史离线服务】,从metaq消费用户阅读文章的信息,解析、处理相关业务逻辑,最后存储到HBase。问题现象ECS监控
  两台机器【xxxxxxxxxxxxxxxxxx6、xxxxxxxxxxxxxxxxx1】在早高峰的时候Load很高,CPU使用率正常。
  metaq监控
  造成消息消费的慢,每天早上都有大量消息堆积,导致用户看不到自己的阅读历史。问题分析基本情况
  【阅读历史离线服务】共有x台ECS,每台ECS配置是8c16g。其中x台机器正常,2台机器不正常。排查思路找不同
  分析不正常机器与正常机器有哪些差异:对比了【应用程序版本】、【应用程序配置】、【JVM配置参数】、【JDK版本】、【操作系统版本】,发现【JDK版本】不一致。
  正常机器:openjdkversion1。8。0171OpenJDKRuntimeEnvironment(build1。8。0171b10)OpenJDK64BitServerVM(build25。171b10,mixedmode)
  异常机器:openjdkversion1。8。0222OpenJDKRuntimeEnvironment(build1。8。0222b10)OpenJDK64BitServerVM(build25。222b10,mixedmode)
  到此初步定位不同机器运行状态不一致的现象是由于【JDK版本】不一致造成的,所以将【问题机器的JDK版本】替换为【正常机器的JDK版本】问题就可以解决了。定位问题代码
  但是问题的根因还需要尝试排查一下,既然是【JDK版本】不一致造成的,那么会不会是【1。8。0222】这个版本中有BUG,刚好我们写的程序触发了这个BUG?
  所以接下来需要弄清楚程序运行过程中执行了哪些业务逻辑、这些业务逻辑涉及到了哪些JDKAPI,直接想到的工具是arthasprofiler,下面是抓到的热点方法。
  通过对比【异常机器】与【正常机器】的热点方法,发现Runtime。getRuntime()。availableProcessors()很可疑:
  业务相关代码:CompletableFutureResultcompletableFuture业务逻辑,调用hbaseclient中apicompletableFuture。whenCompleteAsync((result,t){业务逻辑处理},Pool。getSubmitPool())。exceptionally((t){业务逻辑处理})。get();
  CompletableFuture相关代码:Waitsifnecessaryforthisfuturetocomplete,andthenreturnsitsresult。returntheresultvaluethrowsCancellationExceptionifthisfuturewascancelledthrowsExecutionExceptionifthisfuturecompletedexceptionallythrowsInterruptedExceptionifthecurrentthreadwasinterruptedwhilewaitingpublicTget()throwsInterruptedException,ExecutionException{Objectr;returnreportGet((rresult)null?waitingGet(true):r);}Returnsrawresultafterwaiting,ornullifinterruptibleandinterrupted。privateObjectwaitingGet(booleaninterruptible){Signallerqnull;booleanqueuedfalse;intspins1;Objectr;while((rresult)null){if(spins0)spins(Runtime。getRuntime()。availableProcessors()1)?18:0;Usebriefspinwaitonmultiprocessorselseif(spins0){if(ThreadLocalRandom。nextSecondarySeed()0)spins;}elseif(qnull)qnewSignaller(interruptible,0L,0L);elseif(!queued)queuedtryPushStack(q);elseif(interruptibleq。interruptControl0){q。threadnull;cleanStack();returnnull;}elseif(q。thread!nullresultnull){try{ForkJoinPool。managedBlock(q);}catch(InterruptedExceptionie){q。interruptControl1;}}}if(q!null){q。threadnull;if(q。interruptControl0){if(interruptible)rnull;reportinterruptionelseThread。currentThread()。interrupt();}}postComplete();returnr;}猜测验证publicclassProcessors{publicstaticvoidmain(String〔〕args){intavailableProcessorsRuntime。getRuntime()。availableProcessors();System。out。println(AvailableProcessors:availableProcessors);for(inti0;iavailableProcessors;i){ThreadtnewThread((){while(true){try{intpsRuntime。getRuntime()。availableProcessors();Thread。sleep(1L);}catch(Exceptione){e。printStackTrace();}}});t。start();}}}
  将验证代码在【JDK版本】为【1。8。0222】的机器上运行,随即复现了线上问题。定位根因
  那么【1。8。0222】与【1。8。0171】版本在Runtime。getRuntime()。availableProcessors()的实现上有什么差别呢?【1。8。0222】增加了容器环境的逻辑,比【1。8。0171】复杂了很多。
  最后我们看看在https:bugs。openjdk。java。net的解释吧。
  总结:
  Runtime。getRuntime()。availableProcessors()在不同JDK版本上的实现是没有问题的,CompletableFuture。waitingGet在【1。8。0222】版本上,没有测试到Runtime。getRuntime()。availableProcessors()对性能的影响,导致了性能问题。解决方法
  openjdk在1。8。01911。8。0222之间的版本都存在问题,换成1。8。0191之前,或1。8。0232及以后的版本可以。问题根因
  CompletableFuture。get()的实现方式在一些jdk版本存在缺陷,
  详情见:〔JDK8227018〕CompletableFutureshouldnotcallRuntime。availableProcessorsonfastpathJavaBugSystem

刚刚!火炬传递启动英雄湖北,活力宜昌。3月29日上午,在宜昌市秭归县屈原故里文化旅游区屈原广场,湖北省第十六届运动会火种汇集暨线上、线下火炬传递启动仪式隆重举行。湖北省第十六届运动会组委会副主任……南京长江花朝节开幕,快来幕燕滨江樱花带赏樱吧扬子晚报网3月19日讯(记者徐昇)三月的南京,百花盛放,正值樱花最佳观赏期。3月19日,第二届长江花朝节在南京幕燕滨江风貌区举行。幕燕滨江樱花带还获得了世界规模最大的滨江樱花观……59岁何超琼与刘嘉玲同框,穿豹纹裙优雅大气,输了身高却赢了气欢迎关注逆袭穿搭Amway更多时尚资讯,分享给大家很多时候一些女性到了中年就不敢轻易地去尝试一些大胆的穿搭,其实在女性到了中年更应该去选择一些新颖的穿法。女性在经过岁月的……养肝并非一日之功,想要延长肝脏寿命,建议从这5个方面下手导语:肝脏是人体最主要的代谢排毒器官,身体当中多余的垃圾毒素,都是由于肝脏来代谢排出掉,若是肝脏出现了问题后,很容易导致大量的毒素沉积在身体当中以及肝脏当中,影响到身体健康。……卡里克回应与西汉姆传闻我在米堡过得很开心,祝莫耶斯好运直播吧3月10日讯卡里克近日和西汉姆主帅位置联系在了一起,不过他表示,自己目前专注于米堡,并祝莫耶斯在西汉姆好运。卡里克说:我很高兴来到这里。我为什么不高兴呢?我们有一支……走进隆回,与启辰SUV双子星一起探寻乡镇之美3月6日,东风日产启辰寻找快乐的小城生活SUV双子星试驾活动于湖南邵阳隆回县展开探寻。致力于制造快乐出行的东风日产启辰,将携启辰大V、启辰星组成的SUV双子星一起,与全国媒体、……(社会)国新办举行权威部门话开局系列主题新闻发布会介绍着力推新华社照片,北京,2023年3月6日国新办举行权威部门话开局系列主题新闻发布会介绍着力推动高质量发展,为全面建设社会主义现代化国家开好局起好步3月6日,国务院新闻办……有色金属一半是火焰,一半是海水!有色金属一般分为三块:贵金属、基本工业金属、能源金属。一、贵金属:包含金、银、铂等。投资建议:不关注。逻辑:美国通胀同比虽然高于预期,虽然预期回落,但黄金一直……新华视点多样生物多彩四川四川地处中国西南腹地,在独特的地理位置、多样的地貌条件、复杂的气候等因素的共同作用下,多类型的自然生态系统在四川得以充分发挥。在四川,你不仅能看到憨态可掬的大熊猫,也能观赏到林……3分钟带你了解什么是ChatGPT视频加载中。。。2022年11月底,美国人工智能研究实验室OpenAI上线了人工智能聊天软件ChatGPT。无论是写论文还是写代码,它都能一气呵成、游刃有余,号称史上最强……2023年预算报告的四大看点两会最关注记者樊旭3月5日,《2022年中央和地方预算执行情况与2023年中央和地方预算草案》(以下简称预算报告)提请十四届全国人大一次会议审查。预算报告显示,今年财政工作将有四大……自然天工开物!科学家首次基于深度学习算法,从头设计出自然界不仅供医学专业人士阅读参考年后看《流浪地球2》时,朋友突然问我:技术都到这儿了,不能利用550W来设计点儿新蛋白,治疗这些辐射病吗?我:啊?(内心:你小子看个电影还挺……
管线机茶吧机净饮一体机饮水机哪个更好?就现在市场而言,各式各款的管线机、茶吧机、净饮一体机、饮水机等饮水方式逐渐兴起,那到底哪款更适合你的家呢管线机优点:管线机最大的优点就是类似饮水机,可以连接净水器,……福建省旅游协会荣获优秀行业组织奖1月24日,中国旅行社协会隆重发布第四届中国旅行社协会行业榜单,榜单表彰旅行社品牌20强、旅行社品牌20强提名10家、国内社TOP30家、转型创新企业20家、诚信经营企业20家……人类是从一条鱼演化成智人?我们大家都知道,宇宙已经产生了130多亿年,一声爆炸,宇宙到现在130多亿年,而我们地球才诞生40多亿年了,与地球的年龄相比,人类非常的年轻,那我们最早的人类大概在600多万年……英伟达证实遭遇攻击,核心源代码惨遭泄露,75GB机密数据被公【CSDN编者按】自2020年9月13日英伟达宣布,要以400亿美元的价格从软银手中收购Arm之后,英伟达吸引了不少关注。尽管这一收购未能成功,但英伟达的热度一直不减,它的壮举……百香果,对胃到底是好是坏呢?提醒这4类人建议别凑热闹了百香果,誉为百果之王,而且百香果有百种香味,可能很多人会感觉到比较疑惑,一种水果怎么能有百种香味呢?那其实确实如此,像百香果中有上百种芳香的物质,成熟的百香果色,散发出来……深挖旅行市场,捷途X70S开创大家庭出行新业态在自驾旅行的话题引发越来越多人关注的时候,捷途提出了进军旅行细分市场的口号。6月21日,主打旅行概念的新捷途X70S正式上市,新车共推出6款车型,售价8。79万11。99万元。……伊莎贝拉一字肩连衣裙露肩有活力,海莉用坦克背心解放夏天街拍每日推送赏心悦目的欧美女星街拍,超模、网红、明星每天都有多样化搭配方式,希望能给大家带来实用性和时尚性兼具的穿搭典范,更希望能帮助姑娘们建立自己内在的审美体系和精神滋养体系,用……可别再冤枉辣椒了,研究发现常吃辣可预防高血压心脏病有这样一种食物,让很多人吃起来满头大汗、面色潮红,却感到很上头,甚至停不下来。它就是辣椒。所谓一时吃辣一时爽,一直吃辣一直爽,大部分人对辣椒又爱又恨。爱吃辣的人顿顿少不了……NBA总决赛第五场,维金斯2613,勇士10494力克凯尔特2122赛季NBA总决赛第五场今天开打,勇士队回到主场迎战凯尔特人,今天勇士队继续使用和上一场比赛一样的先发阵容。上半场勇士队发挥出色取得5139领先,第三节一上来,塔图……有勇气更自信,退休阿姨一个人三条狗开着房车海南游海南是喜欢旅行者的圣地,房车一族的乐园。见多了一群朋友,一大家子,一对夫妻,开着房车,说走就走,说住就住,天涯潇洒任我行。若是一个年近花甲的阿姨独自开着房车,环游海南岛,还是让……秦晓雯进退两难,首钢顶薪一哥确认离队,有望加盟北控辅佐马布里秦晓雯进退两难,首钢顶薪一哥确认离队,有望加盟北控辅佐马布里。北京首钢队是上赛季最失意的一支球队,董事长秦晓雯豪掷三亿挥金如土,但是球队仅仅打进了季后赛第一轮,因此在赛季结束后……五一假期出行节后上班提示假期做好这些疾病的预防今天五一假期已经过去了三天提醒大家,节后上班时间有变!根据国务院办公厅印发的《关于2022年部分节假日安排的通知》2022年劳动节放假……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网