成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

優化排查線程阻塞:CompletableFuture 和 DiscardPolicy

開發 前端
既然不是死循環、CPU空轉。那是不是代碼阻塞的問題呢。導出 66182 進程jvm的 stack 文件 jstack -l 66182 > block66182.jstack。因為知道是http 線程的問題。

[[426087]]

本文轉載自微信公眾號「潛行前行」,作者cscw 。轉載本文請聯系潛行前行公眾號。

 問題發現

1 前天大佬通過prometheus發現 tomcat http busy狀態的線程這幾天呈線性遞增。每一天增加3個

排查問題

1:找到busy線程在哪。通過jvm自帶的 jps 命令可以找到服務對應的進程ID:66182$>$top -Hp 66182

$pidstat -u -p 66182 1 5

大部分的線程都正常,cpu利用率不高,而且線程ID變動快,基本排除 死循環、CPU 空轉的問題

2:既然不是死循環、CPU空轉。那是不是代碼阻塞的問題呢。導出 66182 進程jvm的 stack 文件 jstack -l 66182 > block66182.jstack。因為知道是http 線程的問題。http 的開頭一般都是 http-nio ??梢允褂?grep -A 15 'http-nio' block66182.jstack 輸出一些關鍵信息。找了很久,多數http 都是正常狀態。然后還找到了項目代碼 updateXYDVerifiedCodeByDate 之類的。定位到具體,發現是一個定時任務

3 查了下 xxl-task 調度日志。凌晨左右調度了十次,失敗了三次,和在prometheus發現的 busy http線程增加的規律是一致的

4 查找代碼發現是 CompletableFuture 調用get阻塞住了。后來改成 future.get(15, TimeUnit.SECONDS);。則每隔 15 秒報錯一次。但是在promethues 監控到 verifiedCodeQueryExecutor 的線程隊列是空的。

4.1 promethues 監控到的線程隊列數為空

5 沒有任務 CompletableFuture 的get方法還在執行,查看下 verifiedCodeQueryExecutor 的定義。發現,阻塞隊列的拒絕策略 是 DiscardPolicy 丟棄。也就是任務丟棄了不被執行,而封裝成的CompletableFuture 自然就不會有結果返回,因此一直會被阻塞,而改了代碼則是超時返回。真相大白。。。。。

解決問題

1:隊列無限,好像不太好,不接受

2:自定義拒絕策略

  1. new RejectedExecutionHandler(){ 
  2.             @Override 
  3.             public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { 
  4.                 throw new RuntimeException(" over size error "); 
  5.             } 
  6.         } 

3:但考慮到任務必須被處理掉,任務不能被丟棄啊。so 暫時用 CallerRunsPolicy 策略,executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

4:后面再優化

 

 

責任編輯:武曉燕 來源: 潛行前行
相關推薦

2024-08-06 09:43:54

Java 8工具編程

2021-06-04 18:14:15

阻塞非阻塞tcp

2018-01-11 08:24:45

服務器模型詳解

2022-09-06 08:25:13

線程異步任務

2023-06-02 18:37:14

Dubbo異步化接口

2014-10-09 09:48:14

JavaScript

2024-01-11 12:14:31

Async線程池任務

2017-12-21 15:48:11

JavaCompletable

2025-02-28 09:20:00

Future開發代碼

2024-07-12 09:12:47

2010-03-16 19:08:03

Java線程同步

2021-02-22 17:18:35

MySQLSQL行鎖

2012-10-10 10:00:27

同步異步開發Java

2010-03-15 18:34:08

Java多線程

2020-07-13 09:05:47

2021-11-14 05:00:56

排查Sdk方式

2010-01-28 09:55:05

性能優化

2024-09-10 09:05:12

SpringREST并發

2025-01-17 00:00:00

APIJava線程

2021-08-30 19:00:46

靜態CompletableCountDownLa
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区在线观看 | 亚洲一区二区三区 | 亚洲国产一区在线 | 久久精品亚洲 | 91精产国品一二三区 | 亚洲一区在线日韩在线深爱 | 欧美成人精品二区三区99精品 | 麻豆91av| 国产精品久久久久久av公交车 | 国产成人午夜电影网 | 99久久99 | av免费在线观看网站 | 九九热在线精品视频 | 久草热视频| 亚洲电影一区二区三区 | 在线亚洲欧美 | 国产成人免费视频网站高清观看视频 | 精品国产成人 | 欧美一区二 | 精品成人 | 香蕉一区 | 亚洲三区视频 | 国产成人精品一区二区三区 | 日韩在线视频精品 | 欧美女优在线观看 | 欧美在线视频网站 | 久久久一区二区 | 亚洲精品小视频在线观看 | 91免费看片| 日本三级电影在线观看视频 | 精品国产不卡一区二区三区 | 日韩aⅴ视频 | 亚洲不卡在线观看 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产精品一区二区在线 | 最新免费视频 | av手机在线看 | 伊人免费视频二 | 亚洲美女一区 | 国产精品久久国产精品 | 午夜精品久久久久久久久久久久久 |