一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

進程還在,JSF接口不干活了,這你敢信?

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-06-14 10:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、問題背景:

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

報錯日志如下:

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)象開始推測原因,系統(tǒng)啟動時,會給JSF線程池分配固定的大小,當線程都在工作的時,外部流量又打進來,那么會沒有線程去處理請求,此時會有上述的異常。那么JSF線程在干什么呢?

1)借助SGM打印棧信息

wKgaomZrqSSAKZAGAAHSieRip_4994.png

2)分析棧信息

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

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

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

wKgZomZrqSWALHCVAAEESOC_sjs486.png

wKgaomZrqSaAPz-bAAdPA86iNic216.png

wKgZomZrqSeAcgAmAADj2W_1lmc681.png

wKgaomZrqSmAK3BxAAdpiHHPDn0573.png

2.2)分析線程夯住的方法

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

wKgZomZrqSyAZXtfAACTLjOmsrk609.png

wKgaomZrqS2AWE1MAAN3gpgONpE291.png

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

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

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

wKgZomZrqS-AKQArAAUkCHm-7Lw807.png

代碼截圖:

wKgaomZrqTCAeOc8AASlhVlA9Go131.png

圖1

wKgZomZrqTKAWpEtAAHYws4Gm0Y606.png

圖2

wKgaomZrqTOAO4vlAAMd4WsLnGI533.png

圖3

從日志驗證:日志只打印更新拓撲的日志,沒有打印更新成功的日志,且02:20分以后r2m-topo-updater就不在打印日志

wKgZomZrqTWAJ_DmAAzzFfnshIU292.png

2.4)深入挖掘原因

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

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

wKgZomZrqTiAbjnNAAI7yJHAu4U895.png

2.5)驗證

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

wKgZomZrqTuAINdHAApQ5YRTktA012.png

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

wKgaomZrqTyAVq2bAAN5V4cKenY771.png

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

wKgZomZrqT6AAcTPAAYESW5jEwc558.png

3.復(fù)盤

1)此問題在特定的使用場景下才會小概率出現(xiàn),非常感謝中間件團隊一起協(xié)助定位問題,后續(xù)也將異步更新拓撲改為同步處理。

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

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

審核編輯 黃宇

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

    關(guān)注

    33

    文章

    9005

    瀏覽量

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

    關(guān)注

    0

    文章

    12

    瀏覽量

    7844
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

    jsf標簽文檔

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

    DesignSpark激活了

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

    進程貼】qq416296378的示波器DIY進程

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

    進程帖】xianyoudian的示波器DIY進程帖:見證奇跡的時刻

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

    孤兒進程和僵尸進程

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

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

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

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

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

    JSF標簽庫

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

    jsf標簽官方幫助文檔

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

    jsf標簽庫文檔

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

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

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

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

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

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

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

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

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