最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

線上dubbo線程池耗盡CyclicBarrier線程屏障異常解決記錄

 更新時(shí)間:2022年03月01日 11:10:53   作者:kl  
系統(tǒng)相關(guān)使用人員反饋系統(tǒng)故障,這篇文章主要介紹了線上dubbo線程池耗盡CyclicBarrier線程屏障異常解決的記錄,有需要的朋友可以借鑒參考下

事件背景

系統(tǒng)相關(guān)使用人員反饋系統(tǒng)故障,日志顯示從ams系統(tǒng)服務(wù)提示dubbo處理線程不足,具體異常信息如下:

問(wèn)題定位

從上圖可知,dubbo的處理線程池滿了,默認(rèn)200個(gè)線程,活動(dòng)線程也是200個(gè)。這個(gè)現(xiàn)象非常不正常,我們的應(yīng)用并發(fā)還沒(méi)有到這個(gè)程度能同時(shí)占用200個(gè)線程處理請(qǐng)求。然后去讀了下dubbo源碼,發(fā)現(xiàn)dubbo也認(rèn)為這種情況不正常,然后幫我們記錄了應(yīng)用的線程堆棧信息,這個(gè)非常贊。代碼如下:

上面這段代碼,在線程池不夠用時(shí),會(huì)每隔十分鐘輸出一份dump文件到用戶目錄,如:

在dump文件中,我們找到了耗盡DubboServerHandler線程池最后一個(gè)線程

通過(guò)分析得知:是我們應(yīng)用程序有段代碼導(dǎo)致的問(wèn)題,在特定條件下會(huì)觸發(fā)線程死鎖,代碼如下

代碼中定義了一個(gè)線程屏障CyclicBarrier,同行數(shù)(調(diào)用await的線程數(shù))是11,用來(lái)處理十個(gè)線程的運(yùn)算,然后都計(jì)算完后拿到處理結(jié)果。本身代碼沒(méi)有什么問(wèn)題,在沒(méi)有并發(fā)的情況下,不會(huì)觸發(fā)問(wèn)題。但是注意中間那個(gè)箭頭,執(zhí)行線程的線程池是固定大小20的線程池,故當(dāng)同時(shí)并發(fā)數(shù)多于2個(gè)的時(shí)候線程池的線程會(huì)不夠用,導(dǎo)致線程等待,然后CyclicBarrier的main線程也會(huì)等待其他線程中的await。這就造成了相互等待,下一個(gè)請(qǐng)求過(guò)來(lái)還是繼續(xù)等待,也就是死鎖了。至此所有問(wèn)題都以清晰明朗了。

解決問(wèn)題

方案一:改CyclicBarrier為CountDownLatch,這個(gè)兩個(gè)并發(fā)工具都是jdk1.5推出為了簡(jiǎn)化并發(fā)編程,CyclicBarrier的await會(huì)占用線程池中的線程不釋放,導(dǎo)致線程不足,而CountDownLatch的count不會(huì)

方案二:改線程池類(lèi)型為CachedThreadPool,不會(huì)應(yīng)為線程池線程不夠用,導(dǎo)致相互等待

文末結(jié)語(yǔ)

java并發(fā)包提供了豐富的api來(lái)簡(jiǎn)化多線程模型的開(kāi)發(fā),但是在針對(duì)多線程模型業(yè)務(wù)開(kāi)發(fā)時(shí),我們還需要多留心下多線程帶來(lái)的坑??傊嗪藭r(shí)代推薦大家多使用多線程開(kāi)發(fā),同時(shí),也要對(duì)使用的工具有更多的了解

以上就是線上dubbo線程池耗盡CyclicBarrier線程屏障異常的詳細(xì)內(nèi)容,更多關(guān)于dubbo線程池耗盡CyclicBarrier線程屏障的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMVC 整合SSM框架詳解

    SpringMVC 整合SSM框架詳解

    這篇文章主要介紹了SpringMVC 整合SSM框架詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java獲取工程路徑方法詳解

    Java獲取工程路徑方法詳解

    這篇文章主要介紹了Java獲取工程路徑方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java多線程抓取鈴聲多多官網(wǎng)的鈴聲數(shù)據(jù)

    java多線程抓取鈴聲多多官網(wǎng)的鈴聲數(shù)據(jù)

    很容易就能發(fā)現(xiàn)通過(guò)改變 listId和page就能從服務(wù)器獲取鈴聲的json數(shù)據(jù), 通過(guò)解析json數(shù)據(jù), 可以看到都帶有{"hasmore":1,"curpage":1}這樣子的指示,通過(guò)判斷hasmore的值,決定是否進(jìn)行下一頁(yè)的抓取。 但是通過(guò)上面這個(gè)鏈接返回的json中不帶有鈴聲的下載地址
    2016-04-04
  • spring-session簡(jiǎn)介及實(shí)現(xiàn)原理源碼分析

    spring-session簡(jiǎn)介及實(shí)現(xiàn)原理源碼分析

    這篇文章主要介紹了spring-session簡(jiǎn)介及實(shí)現(xiàn)原理源碼分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java之 TreeSet的詳細(xì)使用說(shuō)明

    Java之 TreeSet的詳細(xì)使用說(shuō)明

    這篇文章主要介紹了Java之 TreeSet的詳細(xì)使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java阻塞延遲隊(duì)列DelayQueue原理及使用詳解

    Java阻塞延遲隊(duì)列DelayQueue原理及使用詳解

    這篇文章主要介紹了Java阻塞延遲隊(duì)列DelayQueue原理及使用詳解,阻塞隊(duì)列是一個(gè)支持兩個(gè)附加操作的隊(duì)列,這兩個(gè)附加的操作是:在隊(duì)列為空時(shí),從隊(duì)列中獲取元素的消費(fèi)者線程會(huì)一直等待直到隊(duì)列變?yōu)榉强?需要的朋友可以參考下
    2023-12-12
  • Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消的8種方法總結(jié)

    Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消的8種方法總結(jié)

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消功能的8種不同方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • Java中增強(qiáng)for循環(huán)代碼示例

    Java中增強(qiáng)for循環(huán)代碼示例

    這篇文章主要給大家介紹了Java中增強(qiáng)for循環(huán)的相關(guān)資料,for/in循環(huán)就是JDK5.0中所謂的增強(qiáng)For循環(huán),它能對(duì)數(shù)組和集合進(jìn)行遍歷,使用它會(huì)使用你的代碼短小而精煉的多,需要的朋友可以參考下
    2023-10-10
  • java實(shí)現(xiàn)日歷窗口小程序

    java實(shí)現(xiàn)日歷窗口小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)日歷窗口小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java中List遍歷刪除元素remove()的方法

    Java中List遍歷刪除元素remove()的方法

    這篇文章主要介紹了Java中List遍歷刪除元素remove()的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

喀什市| 北辰区| 营口市| 尉犁县| 万年县| 明溪县| 湖南省| 杂多县| 商南县| 集安市| 新平| 香港 | 仪征市| 巴林右旗| 娱乐| 屏东县| 齐齐哈尔市| 呼伦贝尔市| 宜章县| 修水县| 兰溪市| 池州市| 黄梅县| 荥经县| 石林| 登封市| 延吉市| 六盘水市| 富宁县| 乐亭县| 喀喇沁旗| 公主岭市| 山东| 廉江市| 盐津县| 寿阳县| 宝鸡市| 淮安市| 临澧县| 栾川县| 岑溪市|