精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

進(jìn)程還在,JSF接口不干活了,這你敢信?

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-06-14 10:21 ? 次閱讀

1、問(wèn)題背景:

應(yīng)用在配合R2m升級(jí)redis版本的過(guò)程中,上游反饋調(diào)用接口報(bào)錯(cuò),RpcException:[Biz thread pool of provider has been exhausted],通過(guò)監(jiān)控系統(tǒng)和日志系統(tǒng)定位到現(xiàn)象只出現(xiàn)在一兩個(gè)節(jié)點(diǎn),并持續(xù)出現(xiàn)。第一時(shí)間通過(guò)JSF將有問(wèn)題的節(jié)點(diǎn)下線,保留現(xiàn)場(chǎng),業(yè)務(wù)恢復(fù)。

報(bào)錯(cuò)日志如下:

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、排查步驟:

從現(xiàn)象開始推測(cè)原因,系統(tǒng)啟動(dòng)時(shí),會(huì)給JSF線程池分配固定的大小,當(dāng)線程都在工作的時(shí),外部流量又打進(jìn)來(lái),那么會(huì)沒(méi)有線程去處理請(qǐng)求,此時(shí)會(huì)有上述的異常。那么JSF線程在干什么呢?

1)借助SGM打印棧信息

wKgaomZrqSSAKZAGAAHSieRip_4994.png

2)分析棧信息

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

2.1)分析線程狀態(tài)

通過(guò)工具可以定位到JSF線程大部分卡在JedisClusterInfoCache#getSlaveOfSlotFromDc方法,如圖:

wKgZomZrqSWALHCVAAEESOC_sjs486.png

wKgaomZrqSaAPz-bAAdPA86iNic216.png

wKgZomZrqSeAcgAmAADj2W_1lmc681.png

wKgaomZrqSmAK3BxAAdpiHHPDn0573.png

2.2)分析線程夯住的方法

getSlaveOfSlotFromDc在方法入口就需要獲取讀鎖,同時(shí)在全局變量聲明了讀鎖和寫鎖:

wKgZomZrqSyAZXtfAACTLjOmsrk609.png

wKgaomZrqS2AWE1MAAN3gpgONpE291.png

此時(shí)對(duì)問(wèn)題有一個(gè)大體的了解,大概推測(cè):getSlaveOfSlotFromDc是獲取redis連接池,該方法入口處需要獲取讀鎖,由于讀鎖之間不會(huì)互斥,所以猜測(cè)有業(yè)務(wù)獲取到寫鎖后沒(méi)有釋放。同時(shí)讀鎖沒(méi)有設(shè)置超時(shí)時(shí)間,所以導(dǎo)致杰夫線程處理業(yè)務(wù)時(shí)卡在獲取讀鎖處,無(wú)法釋放。

2.3)從業(yè)務(wù)的角度分析持有寫鎖的邏輯

向中間件研發(fā)尋求幫助,經(jīng)過(guò)排查,定位到有個(gè)更新拓?fù)涞亩〞r(shí)任務(wù),執(zhí)行時(shí)會(huì)先獲取寫鎖,根據(jù)該消息,定位到任務(wù)的棧信息:

wKgZomZrqS-AKQArAAUkCHm-7Lw807.png

代碼截圖:

wKgaomZrqTCAeOc8AASlhVlA9Go131.png

圖1

wKgZomZrqTKAWpEtAAHYws4Gm0Y606.png

圖2

wKgaomZrqTOAO4vlAAMd4WsLnGI533.png

圖3

從日志驗(yàn)證:日志只打印更新拓?fù)涞娜罩荆瑳](méi)有打印更新成功的日志,且02:20分以后r2m-topo-updater就不在打印日志

wKgZomZrqTWAJ_DmAAzzFfnshIU292.png

2.4)深入挖掘原因

雖然現(xiàn)象已經(jīng)可以推測(cè)出來(lái),但是對(duì)問(wèn)題的原因還是百思不得其解,難道parallelStream().forEach存在bug?難道有遠(yuǎn)程請(qǐng)求,沒(méi)有設(shè)置超時(shí)時(shí)間?...

經(jīng)過(guò)查找資料確認(rèn),如果沒(méi)有指定,那么parallelStream().forEach會(huì)使用ForkJoinPool.commonPool這個(gè)默認(rèn)的線程池去處理任務(wù),該線程池默認(rèn)設(shè)置(容器核心數(shù)-1)個(gè)活躍線程。同時(shí)caffeine數(shù)據(jù)過(guò)期后會(huì)異步刷新數(shù)據(jù),如果沒(méi)有指定線程池,它默認(rèn)也會(huì)使用ForkJoinPool.commonPool()來(lái)執(zhí)行異步線程。那么就有概率出現(xiàn)獲取到寫鎖的線程無(wú)法獲取執(zhí)行權(quán),獲取執(zhí)行權(quán)的線程無(wú)法獲取到讀鎖。

wKgZomZrqTiAbjnNAAI7yJHAu4U895.png

2.5)驗(yàn)證

3個(gè)ForkJoinPool.commonPool-worker的確都夯在獲取redis連接處,線程池的活躍線程都在等待讀鎖。

wKgZomZrqTuAINdHAApQ5YRTktA012.png

本地caffeine緩存沒(méi)有設(shè)置自定義線程池

wKgaomZrqTyAVq2bAAN5V4cKenY771.png

topo-updater夯在foreach業(yè)務(wù)處理邏輯中

wKgZomZrqT6AAcTPAAYESW5jEwc558.png

3.復(fù)盤

1)此問(wèn)題在特定的使用場(chǎng)景下才會(huì)小概率出現(xiàn),非常感謝中間件團(tuán)隊(duì)一起協(xié)助定位問(wèn)題,后續(xù)也將異步更新拓?fù)涓臑橥教幚怼?/p>

2)Java提供了很多異步處理的能力,但是異常處理也代表需要開啟線程或者使用共用的線程池,也需要注意。

3)做好監(jiān)控,能第一時(shí)間發(fā)現(xiàn)問(wèn)題并處理問(wèn)題。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8499

    瀏覽量

    150837
  • JSF
    JSF
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    7742
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自己收集的最新AD版本的軟件與學(xué)習(xí)教程,感覺(jué)很實(shí)用,我學(xué)了幾天就上手干活了。

    本帖最后由 jf_44510017 于 2024-6-20 17:26 編輯 自己收集的最新AD版本的軟件與學(xué)習(xí)教程,感覺(jué)很實(shí)用,我學(xué)了幾天就上手干活了。特分享給大家。 鏈接:https
    發(fā)表于 06-08 14:57

    jsf標(biāo)簽文檔

    jsf標(biāo)簽文檔導(dǎo)航規(guī)則定義了如何在應(yīng)用程序中從特定頁(yè)面導(dǎo)航至另一個(gè)頁(yè)面靜態(tài)導(dǎo)航是單一的結(jié)果映射。在靜態(tài)導(dǎo)航中,單擊指定按鈕總是選擇固定的頁(yè)面來(lái)呈現(xiàn)響應(yīng)navigation-rule元素最重要的兩個(gè)
    發(fā)表于 12-08 11:23

    DesignSpark激活了!

    活了!很好用
    發(fā)表于 09-10 14:21

    進(jìn)程貼】qq416296378的示波器DIY進(jìn)程

    ``呃進(jìn)程貼因?yàn)樵?b class='flag-5'>還在路上 反正早晚都要開帖現(xiàn)在 先開開 元件到了就開始更新現(xiàn)在先灌水幾天,等待ing估計(jì) 希望我可以一次成功 , 不要有失誤嘿嘿``
    發(fā)表于 05-23 22:36

    進(jìn)程帖】xianyoudian的示波器DIY進(jìn)程帖:見(jiàn)證奇跡的時(shí)刻

    `參考【進(jìn)程帖】zpzdd的示波器DIY進(jìn)程帖 - STM32/STM8技術(shù)論壇 - 中國(guó)電子技術(shù)論壇 - 最好最受歡迎電子論壇! https://bbs.elecfans.com
    發(fā)表于 05-28 11:15

    孤兒進(jìn)程和僵尸進(jìn)程

    ,回收掉子進(jìn)程的資源。2)孤兒進(jìn)程孤兒進(jìn)程:父進(jìn)程結(jié)束了,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么這
    發(fā)表于 11-29 14:08

    JSF應(yīng)用程序的結(jié)構(gòu)

    JSF應(yīng)用程序的結(jié)構(gòu):JSF 將表示和應(yīng)用程序行為明確分開,JSF是一種事件驅(qū)動(dòng)型的組件模型,請(qǐng)求處理生命周期包括6個(gè)階段,JSF頁(yè)面指向Bean屬性,業(yè)務(wù)邏輯包含在Bean實(shí)現(xiàn)代碼中
    發(fā)表于 12-08 11:06 ?23次下載

    如何使用JSF導(dǎo)航

    JSF應(yīng)用程序的用戶界面由頁(yè)面設(shè)計(jì)人員設(shè)計(jì)。模型對(duì)象是由應(yīng)用程序開發(fā)人員實(shí)現(xiàn)的開發(fā)一個(gè)JSF應(yīng)用的步驟包括:開發(fā)模型對(duì)象、開發(fā)基于JSF用戶界面、編寫時(shí)間監(jiān)聽器或者導(dǎo)航
    發(fā)表于 12-08 11:07 ?0次下載

    JSF標(biāo)簽庫(kù)

    JSF標(biāo)簽庫(kù):JSF核心標(biāo)簽庫(kù),JSF HTML標(biāo)簽庫(kù),使用JSF標(biāo)簽標(biāo)簽         &
    發(fā)表于 12-08 11:10 ?39次下載

    jsf標(biāo)簽官方幫助文檔

    Tag Library Documentation Generator - Generated DocumentationTag Libraries JSF core tag library.
    發(fā)表于 12-08 11:13 ?36次下載

    jsf標(biāo)簽庫(kù)文檔

    jsf標(biāo)簽庫(kù):Tag Library Documentation Generator - Generated DocumentationTag Libraries h  
    發(fā)表于 12-08 11:16 ?29次下載

    基于Hibernate與JSF的企業(yè)展臺(tái)系統(tǒng)設(shè)計(jì)

    在介紹Hibernate 及JSF 基礎(chǔ)上,提出了一種新的Web 系統(tǒng)開發(fā)方法。結(jié)合企業(yè)展臺(tái)系統(tǒng)設(shè)計(jì)實(shí)例研究如何整合基于MVC 模式的Hibernate 及JSF 技術(shù)。關(guān)鍵詞:MVC 模式;Hibernate;JSF;企
    發(fā)表于 08-22 10:58 ?14次下載

    淺議基于JSF的Java國(guó)際化編程及其實(shí)現(xiàn)

    本文從實(shí)際操作的角度,討論了利用JSF 開發(fā)Web 應(yīng)用程序時(shí)實(shí)現(xiàn)程序的國(guó)際化和本地化的方法。提出了解決應(yīng)用程序國(guó)際化的MVC-R 四層框架模型。
    發(fā)表于 01-27 13:47 ?9次下載

    JEB+JSF開發(fā)示例(附源代碼)

    剛到公司時(shí)沒(méi)有接觸過(guò)EJB3和JSF,為了熟悉一下做了個(gè)EJB+JSF開發(fā)示例來(lái)入門.一個(gè)比較簡(jiǎn)單的JSF的web工程做頁(yè)面展現(xiàn),一個(gè)簡(jiǎn)單的EJB3工程做業(yè)務(wù)操作,分別部署到Tomcat下和JBoss下,讓他們通過(guò)
    發(fā)表于 04-07 21:56 ?38次下載

    記一次JSF異步調(diào)用引起的接口可用率降低

    前言 本文記錄了由于JSF異步調(diào)用超時(shí)引起的接口可用率降低問(wèn)題的排查過(guò)程,主要介紹了排查思路和JSF異步調(diào)用的流程,希望可以幫助大家了解JSF的異步調(diào)用原理以及提供一些問(wèn)題排查思路。本
    的頭像 發(fā)表于 08-05 13:40 ?219次閱讀
    記一次<b class='flag-5'>JSF</b>異步調(diào)用引起的<b class='flag-5'>接口</b>可用率降低