专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

Pattinson有线数字会议主席单元(台面双振膜款)TC1006XC产品参数指向特性超心型频率响应2020,000Hz灵敏度36dB输出阻抗小于200欧姆最大承受声压136dB(1T。H。D。1kHz,0dBSPL2x10Pa)收音头20毫米直径镀英国1月CPI仍处40年高位北京商报讯(记者方彬楠赵天舒)在2022年10月份触及41年高点11。1后,英国1月CPI连续第三个月放缓,但仍接近40年高位,比英国央行的目标水平高出5倍。周三,英国国家统计局(美国政坛地震,拜登刚结束访乌,特朗普就扬言要给普京打电话越来越多的迹象表明,眼前这场旷日持久的俄乌冲突,已经成了影响国际局势走向的重大事件,更将成为影响美国2024年总统大选的关键。20日,在毫无征兆之下,拜登突然访问了乌克兰,并释放了美国最脏城市出炉,休斯敦领衔环球时报综合报道纽约邮报19日报道称,美国一家专注于草坪养护的企业LawnStarter近日发布2023全美最脏城市榜单,根据城市空气质量家居环境中的虫害状况处理垃圾的市政基础设施可以查分了!20余省份今日公布考研初试成绩来源中国新闻网21日,20余省份公布2023年全国硕士研究生招生考试初试成绩,考研成绩考研国家线英语一管综等话题纷纷冲上微博热搜榜。初试成绩公布后,初试国家线预计3月中旬公布。此外自驾欧亚大陆99天酸甜苦辣的经历漫游,车里雅宾斯克(16)80集原创故事自驾欧亚大陆99天酸甜苦辣的经历D012D013鄂木斯克车里雅宾斯克,行程911公里,需要12小时导航地图经过了,千辛万苦千山万水千难万险,费尽了千言万语,我们终于闯要说今年中国最迷人的春色,还得来这看!朋友们,最盛大的春天马上就要登场了!想到这些花红柳绿的事啊,我这原本沉闷的心情还是有被瞬间点亮的感觉。如果要说国内赏春,到帕米尔高原上看杏花长期霸占着我的旅行清单榜首。在人间最美的武乡红色资源赋能乡村振兴近年来,武乡县将红色文化资源逐渐转化为独具当地特色的乡村旅游产业。图为武乡红色记忆馆效果图。沿着这条路再往南是八路军太行纪念馆游击战体验园,这些都是革命遗址,还有抗日军政大学总校蟠探访福建永定初溪土楼古村落永定初溪土楼群位于福建省永定区下洋镇,由五座圆楼和数十座方楼组成,依山傍水,百态不一,是中国土楼的代表之一。当地在充分保存现有民居村落原貌的前提下,引导游人文明有序观光游览,让这块天峨文化旅游融合发展,铸牢中华民族共同体意识唢呐迎宾。通讯员王祚玮摄皮鼓舞表演。通讯员王祚玮摄民俗表演蚂拐祭祀。通讯员王祚玮摄蚂拐出世舞。通讯员王祚玮摄非遗表演送背带。通讯员王祚玮摄春耕舞。通讯员王祚玮摄演唱壮族敬酒歌民俗体秦始皇同期名人李斯,你知道多少?历史开讲李斯(284BC208BC)是中国历史上著名的政治家文化家,他是是秦始皇的重要官员之一。也是秦始皇时期的重要人物之一。他出生于一个普通家庭,但凭借着卓越的才华和勤奋的工作,
见证历史,告别燃油车时代,新能源车时代加速到来见证历史,告别燃油车时代,欧洲议会在斯特拉斯堡以340票赞成21票弃权279票反对的结果,通过了2035年欧洲新售燃油轿车和小货车零排放协议,该协议目标是2035年开始在欧盟27国赏梅正当时,快来解锁你的诗意暖春极目新闻记者常怡通讯员邰生鹏覃佐丹叶东辉早春时节,春寒料峭。位于武汉市新洲区三店街高富村的大片青梅花却在竞相怒放,一排排的青梅树上缀满了簇簇洁白的花朵,迎着阳光和春风傲立枝头,好似雪崩时没有一片雪花是无辜的,浅谈明朝三大疑案始末及其影响明末三大疑案是发生在明末宫廷中的梃击案红丸案移宫案的总称,这三大疑案本质上是由皇位争夺所引发的三次政治斗争,涉及皇帝阁臣宦官后宫等诸多势力,三起案件看似独立,但实际上联系紧密,三大世界最大樱花茶园,撑起整个春天的颜值!这里是世界最大樱花茶园中国最美樱花胜地5万多亩的茶园10多万株樱花沿着茶园道路而种是日本冲绳名护城遗址的5倍图源小红书张宇超这里曾被授予最佳摄影目的地甚至登上过中国国家地理杂志封面安阳殷墟考古文旅小镇擦亮甲骨文文化名片沉浸体验汉字民俗洹水安阳名不虚,三千年前是帝都。作为世界文化遗产殷墟所在地世界记忆遗产甲骨文出土地,河南安阳被誉为文字之都。三千年前殷商王室为占卜记事而在龟甲或兽骨上篆刻的甲骨文,是汉字的源头和中今天A股走势十分反常,尾盘快速拉升,发生了什么?今天是2月28号,A股市场收盘了,简单啰嗦几句,因为今天A股市场的走势10分的反常,特别是尾盘最后一小时的走势急速拉升,但成交量却没有放大,这究竟是怎么了?简单说说我的看法。第一首发生了什么?这只基金一夜暴涨39中国基金报记者李树超发生了什么?一只纯债基金突然暴涨39!截至最新净值更新,同泰泰裕三个月定开的基金净值单日暴涨39。41,成为又一例因大额赎回出现暴涨的基金。多位业内人士对此表示佟丽娅代言青岛高新区企业ampampquot正典燕窝ampampquot新品发布会举行青岛新闻网2月28日讯(记者任俊峰)2月28日,位于青岛高新区的跨国全产业链燕窝企业正典燕窝传来好消息2023年正典燕窝新品发布会暨全国加盟商大会在青岛召开。本次大会以春燕归巢守正你知道,在香港参加证券考试要在哪里报名吗?想要在香港从事证券行业,就必须通过香港证券及期货从业员资格考试。而举办香港证券及期货从业员资格考试LicensingExamLE的机构是香港证券及投资学会,HKSI。HKSI香港证深圳各区2022年GDP出炉南山破8000亿,龙岗宝安逼近5000亿2022年,深圳市实现GDP32387。68亿元,继去年迈上3万亿台阶后,再次突破3。2万亿大关。相比2021年增长了1722。8亿元,名义增长速度为5。6。按可比价计算,实际同比(经济)安徽濉溪汽摩配件订单旺生产忙早春时节,安徽省淮北市濉溪经济开发区汽摩配件产销两旺,当地企业加紧生产赶制订单,生产车间一派繁忙。近年来,淮北市濉溪县依托新材料产业发展优势,大力引进和发展汽摩配件产业及相关配套产
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网