精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

線程池如何監控,才能幫助開發者快速定位線上錯誤?

開發 前端
不論線程池是否由 Spring 管理,采集的方式大致相同。一種從 Spring 容器取,一種是創建好線程池后放到一個自定義容器

大部分情況下,線程池的運行情況對于使用者來說是個黑盒

運行情況不可知,會導致 生產出現事故問題排查困難,以及線程池參數難以定義

文章圍繞線程池監控展開,討論 線程池如何監控、監控的指標以及監控數據的存儲展示

01如何監控運行數據

設想一下,如果想監控線程池的運行數據,你會怎么操作?這里提供兩種常規思路

線程池運行時埋點,每一次運行任務都進行統計

定時獲取線程池的運行數據

這里我推薦第二種,因為線程池的監控 API 會通過 獲取主鎖來控制結果的相對準確性,性能相對較差,后面會詳細說明

為什么叫相對準確?因為任務和線程的狀態在計算過程中可能會動態變化,只能給到一個近似值,保證不了絕對準確

模擬下定時采集線程池運行時數據的代碼

  1. private ScheduledThreadPoolExecutor collectVesselExecutor; 
  2.  
  3. String collectVesselTaskName = "client.scheduled.collect.data"
  4. collectVesselExecutor = new ScheduledThreadPoolExecutor( 
  5.         new Integer(1), 
  6.         ThreadFactoryBuilder.builder().daemon(true).prefix(collectVesselTaskName).build() 
  7. ); 
  8.  
  9. // 延遲 initialDelay 后循環調用. scheduleWithFixedDelay 每次執行時間為上一次任務結束時, 向后推一個時間間隔 
  10. collectVesselExecutor.scheduleWithFixedDelay( 
  11.         () -> runTimeGatherTask(), 
  12.         properties.getInitialDelay(), 
  13.         properties.getCollectInterval(), 
  14.         TimeUnit.MILLISECONDS 
  15. ); 

一般線程池分為兩種方式創建,Spring Bean 和非 Spring Bean,假設創建的線程池是 Spring 管理的

我們只需要在 Spring 容器啟動成功后,延遲一段時間后開始采集運行數據就 OK 了

不論線程池是否由 Spring 管理,采集的方式大致相同。一種從 Spring 容器取,一種是創建好線程池后放到一個自定義容器

02監控的指標有哪些?

說一下目前 Hippo4J 定義的線程池監控指標,包括不限于。大家有業務中使用到的監控指標都可以討論下

  • 線程池當前負載:當前線程數 / 最大線程數
  • 線程池峰值負載:當前線程數 / 最大線程數,線程池運行期間最大的負載
  • 核心線程數:線程池的核心線程數
  • 最大線程數:線程池限制同時存在的線程數
  • 當前線程數:當前線程池的線程數
  • 活躍線程數:執行任務的線程的大致數目
  • 最大出現線程數:線程池中運行以來同時存在的最大線程數
  • 阻塞隊列:線程池暫存任務的容器
  • 隊列容量:隊列中允許元素的最大數量
  • 隊列元素:隊列中已存放的元素數量
  • 隊列剩余容量:隊列中還可以存放的元素數量
  • 線程池任務完成總量:已完成執行的任務的大致總數
  • 拒絕策略執行次數:運行時拋出的拒絕次數總數

這些指標可以幫助我們解決大多數因為線程池而導致的問題排查。但是,事情往往不能盡善盡美

當前線程數、活躍線程數、最大出現線程數、線程池任務完成總量 的線程池 API 會先獲取到 mainLock,然后才開始計算

mainLock 是線程池的主鎖,線程執行、線程銷毀和線程池停止等都會使用到這把鎖

  1. final ReentrantLock mainLock = this.mainLock; 
  2. mainLock.lock(); 
  3. try { 
  4.     xxxxx 
  5. } finally { 
  6.     mainLock.unlock(); 

如果頻繁獲取這把鎖,會導致原有線程池任務執行性能受到影響

所以,我們應該避免頻繁獲取這幾項參數,這也是不使用線程池任務執行埋點最重要的原因

03監控數據存儲

上面的線程池監控指標如果只能支持實時查看,并不能幫忙開發日常排查錯誤

大部分場景下,生產上的問題發現會有延遲。比如 12:30 出現的問題,業務13:00 進行的反饋

為了更好幫助開發排錯,我們需要將線程池的歷史運行數據進行存儲

說到線程池歷史運行數據的存儲,使用 時序數據庫(TSDB) 是最合適的

但大部分情況下,公司不會為了這一個需求搭建或者采購時序數據庫,那就可以使用折中方案,比如說 MySQL、ES 等

我們以 MySQL 為例,his_run_data 歷史運行數據表,建表語句如下:

  1. CREATE TABLE `his_run_data` ( 
  2.   `thread_pool_id` varchar(56) DEFAULT NULL COMMENT '線程池ID'
  3.   `instance_id` varchar(256) DEFAULT NULL COMMENT '實例ID'
  4.   `current_load` bigint(20) DEFAULT NULL COMMENT '當前負載'
  5.   `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值負載'
  6.   `pool_size` bigint(20) DEFAULT NULL COMMENT '線程數'
  7.   `active_size` bigint(20) DEFAULT NULL COMMENT '活躍線程數'
  8.   `queue_capacity` bigint(20) DEFAULT NULL COMMENT '隊列容量'
  9.   `queue_size` bigint(20) DEFAULT NULL COMMENT '隊列元素'
  10.   `queue_remaining_capacity` bigint(20) DEFAULT NULL COMMENT '隊列剩余容量'
  11.   `completed_task_count` bigint(20) DEFAULT NULL COMMENT '已完成任務計數'
  12.   `reject_count` bigint(20) DEFAULT NULL COMMENT '拒絕次數'
  13.   `timestampbigint(20) DEFAULT NULL COMMENT '時間戳'
  14.   `gmt_create` datetime DEFAULT NULL COMMENT '創建時間'
  15.   `gmt_modified` datetime DEFAULT NULL COMMENT '修改時間'
  16.   PRIMARY KEY (`id`), 
  17.   KEY `idx_group_key` (`tp_id`,`instance_id`) USING BTREE, 
  18.   KEY `idx_timestamp` (`timestamp`) USING BTREE 
  19. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='歷史運行數據表'

可以看到,建表語句中有三個關鍵字段:

thread_pool_id:表示當前數據的線程池標識

instance_id:應用可能集群部署,標識集群下唯一的線程池

timestamp:記錄線程池運行數據產生時的時間戳

有一個問題,線上的線程池是源源不斷產生運行數據的,遲早不得把表的數據量推到上億?

因為數據是有時效性的,過了一定時間之后,就沒有必要再占用實時的資源

針對上述問題提供兩種解決方案:

  • 假設數據存儲 1 天,如果超出這個時間,直接刪除即可
  • 同上所述,過期數據可以保留到備份表中,并刪除 his_run_data 數據

可能有的小伙伴還會擔心,數據量太大會不會導致查詢時過慢?

我們可以算一下,假設有 100 個應用,每個應用部署 10 個節點

假設數據有效期為 1 小時,那么可以產出的數據是 72 萬,一天也就是 1728 萬

對于 MySQL 而言,幾千萬數據量以下針對索引的查詢,都不會產生性能瓶頸

04如何定義公共監控?

抽象線程池存儲

上面說到,線程池的采集歷史運行數據在各個應用系統中,數據的存儲、定期刪除是否可以抽象出來,避免重復的工作

如果選擇抽象數據存儲,客戶端節點與服務端之間的交互如下:

  • 客戶端定時采集線程池歷史運行數據,將數據打包好發送服務端
  • 服務端接收客戶端上報的數據,進行數據入庫持久化存儲
  • 服務端定期刪除或存檔客戶端線程池歷史運行數據
  • 由服務端統一對外提供線程池運行圖表的數據展示

這里有個小問題,客戶端如何打包發送給服務端?定時采集數據后直接上報是不是可行呢

不推薦采集、上報兩種行為放到一個流程中,好的設計應該是要 分離開職責;而且,如果在上報過程中網絡出現阻塞等等問題,會耽誤采集線程的下一次采集結果

我們可以使用多線程生產、消費模型來做,相信大家初學多線程一定都學過這個設計

  1. // 緩沖隊列 
  2. private BlockingQueue<Message> messageCollectVessel  = new ArrayBlockingQueue(bufferSize); 
  3.  
  4. // 生產者 
  5. Message message = collector.collectMessage(); 
  6. boolean offer = messageCollectVessel.offer(message); 
  7. if (!offer) { 
  8.     log.warn("Buffer data starts stacking data..."); 
  9.  
  10. // 消費者 
  11. while (true) { 
  12.     try { 
  13.         Message message = messageCollectVessel.take(); 
  14.         messageSender.send(message); 
  15.     } catch (Throwable ex) { 
  16.         log.error("Consumption buffer container task failed. Number of buffer container tasks :: {}", messageCollectVessel.size(), ex); 
  17.     } 

創建阻塞緩沖隊列,由定時線程池采集歷史運行數據,并放到緩沖隊列中;然后起一個線程,循環消費即可

極端情況下緩沖隊列元素會出現堆積,最新采集的線程池數據也就無法插入成功,為了不影響客戶端的運行,僅做異常警告處理

使用最新抽象出來的客戶端、服務端交互流程,有以下幾個優點

  • 數據的存儲和查詢展示由服務端提供功能,減輕客戶端壓力和重復工作量
  • 歷史運行數據的刪除或備份操作由服務端統一執行
  • 不同的項目不需要為線程池歷史運行數據分別創建表結構存儲
  • 形成交互規范,避免業務發散單獨開發,中心化的設計更利于技術的迭代和管理

監控圖表展示

不同公司對于線程池的監控不盡相同,出于各種考慮,會將監控封裝成最符合自己業務場景的流程

Hippo4J 從最基本的指標出發,封裝出了最小代價的監控體系,并提供可視化頁面的圖標展示

有興趣可以查看 Hippo4J 框架官網介紹

Site:https://www.hippox.cn

還有一個功能點,考慮到很多公司搭建了一套監控體系,其中以 Prometheus + Grafana 為主

后續 Hippo4J 會接入 Prometheus,應用內部存儲線程池的運行數據,適配 Prometheus 采集存儲,最終展示到 Grafana

05總結回顧

線程池作為企業級應用廣泛的技術,對它的監控是不可或缺的穩定性保障之一

文章從線程池的監控出發,講解了如何監控、監控的指標以及監控數據的存儲,相信讀者們也各有收獲

 

責任編輯:武曉燕 來源: 龍臺的技術筆記
相關推薦

2013-09-29 10:04:09

Arrownock開發者社交

2015-07-22 16:08:46

OpenStack開源貢獻代碼

2012-05-21 22:04:02

Android

2014-04-08 09:58:26

PythonPython教程

2012-08-22 09:39:28

開發者

2013-07-15 14:08:10

開發者技能

2024-12-12 09:00:33

2014-12-24 10:00:07

Spring

2021-02-01 15:59:41

Angular開發者代碼

2024-07-22 08:00:00

2020-10-09 09:44:25

JavaScript 開發 應用

2013-12-27 09:03:47

開發項目

2011-06-22 10:35:02

FirefoxWeb

2019-12-20 09:12:37

內存工程師網絡

2019-06-27 10:15:46

架構代碼項目

2021-12-25 22:31:55

Sentry 監控SDK 開發 性能監控

2022-07-05 08:25:10

Reactyarn link

2015-03-27 11:26:58

移動開ISVSI

2022-08-15 11:29:44

騰訊云云端開發工具Web IDE

2025-07-18 09:31:30

點贊
收藏

51CTO技術棧公眾號

欧美性一区二区| 国产成人小视频| 亚洲天堂av在线免费| 日日噜噜噜噜久久久精品毛片| 福利在线观看| 国产一区二区在线视频| 97在线视频国产| 妖精视频在线观看免费 | 亚洲国产精品久久久天堂| 日韩女优av电影| 88av.com| av影视在线| 欧美高清在线视频| 国产一区二区自拍| 一道本在线视频| 日韩视频一区| 欧美大胆在线视频| 舐め犯し波多野结衣在线观看| 激情久久免费视频| 欧美自拍偷拍一区| 女人喷潮完整视频| 日韩精品卡一| 国产精品伦一区| 欧美不卡1区2区3区| 国产人妖一区二区| 久久久精品网| 97视频免费看| 久久久久久福利| 99热国内精品永久免费观看| 精品视频在线播放色网色视频| www.成年人| 高清av一区二区三区| 天天av天天翘天天综合网| 制服国产精品| 成人av一区| 久久日韩粉嫩一区二区三区| 91嫩草在线| 亚洲综合网av| 美女国产一区二区三区| 国产成人精彩在线视频九色| 日本午夜精品理论片a级app发布| 888久久久| www亚洲欧美| 最新日韩免费视频| japanese国产精品| 国产小视频91| 成人黄色免费网址| 国产精品嫩模av在线| 亚洲乱码国产乱码精品精天堂| 少妇丰满尤物大尺度写真| 大胆国模一区二区三区| 欧美精品在线视频| 日本高清一区二区视频| 精品三级在线| 91精品国产综合久久久久久| 青青草原国产在线视频| 人人玩人人添人人澡欧美| 欧美午夜精品久久久久久超碰| 北条麻妃在线一区| 欧美成人黑人| 欧美日韩在线免费视频| 91av视频免费观看| 日韩不卡在线视频| 精品奇米国产一区二区三区| 久久久久国产免费| 福利电影一区| 国产视频欧美视频| 欧美丰满美乳xxⅹ高潮www| 欧美另类69xxxxx| 精品国产美女在线| 青青草激情视频| 激情婷婷欧美| 欧洲日韩成人av| 中文字幕乱码在线观看| 国产一区二区导航在线播放| 99在线观看| 日本福利在线观看| 国产精品乱人伦中文| 欧美日韩一区二区三区电影| 青春草在线视频| 欧美日韩中文字幕在线| 亚洲国产成人va在线观看麻豆| 国产精品久久免费视频| 亚洲第一福利在线观看| 久久久久亚洲av成人无码电影| 日韩电影一区| 色在人av网站天堂精品| 精品免费囯产一区二区三区 | 91在线免费看网站| 熟妇高潮一区二区高潮| 国产欧美日韩激情| 8x8ⅹ国产精品一区二区二区| 黄色激情在线播放| 欧美日韩国产综合视频在线观看 | 91尤物国产福利在线观看| 国产91精品露脸国语对白| 久久一区免费| 黄色网页网址在线免费| 婷婷国产v国产偷v亚洲高清| 色综合天天色综合| 丁香综合av| 爽爽爽爽爽爽爽成人免费观看| 免费一级黄色大片| 免费成人你懂的| 国产日韩一区二区| 老司机精品视频在线观看6| 午夜精品视频在线观看| 日本美女视频一区| 九九热精品视频在线观看| 欧美理论片在线观看| 国产精华7777777| 成人aa视频在线观看| 亚洲在线观看一区| 成人美女黄网站| 精品国产乱码久久久久久免费| 色婷婷国产精品免| 欧美亚洲专区| 国产精品夜夜夜一区二区三区尤| 99青草视频在线播放视| 午夜激情久久久| 国产亚洲色婷婷久久| 国产影视精品一区二区三区| 91精品国产沙发| 不卡视频在线播放| 亚洲手机成人高清视频| 91香蕉视频导航| 久久99视频| 91成品人片a无限观看| 国产高清视频免费观看| 国产精品家庭影院| 九九热免费精品视频| 日韩高清一级| 69久久夜色精品国产69乱青草| 不卡视频在线播放| 一区二区三区在线免费观看| 日本77777| 欧美aaaa视频| 国产日韩一区在线| 香蕉视频免费在线播放| 精品视频在线免费看| 国产综合精品在线| 日韩精品午夜视频| 日本不卡一区| 巨胸喷奶水www久久久 | 91精品久久久久久粉嫩| 91精品一区二区三区在线观看| 亚洲一二三四五六区| 裸体一区二区三区| 亚洲一区不卡在线| 95精品视频| 欧美成年人视频| aaa一区二区| 亚洲自拍偷拍综合| 亚洲婷婷在线观看| 亚洲麻豆av| 久久综合婷婷综合| 成人自拍av| 中国人与牲禽动交精品| 91精品国产综合久| 亚洲精品国产无套在线观| 亚洲视频 中文字幕| 日韩网站在线| 日本欧洲国产一区二区| 国产精品亲子伦av一区二区三区| 最新的欧美黄色| 国产精品一品二区三区的使用体验| 1000部国产精品成人观看| 日本中文字幕在线不卡| 一区在线播放| 蜜桃999成人看片在线观看| 欧美三级精品| 久久手机免费视频| 人妻少妇精品无码专区久久| 黑人精品xxx一区| wwwww黄色| 国产91精品一区二区麻豆亚洲| 日日橹狠狠爱欧美超碰| 成人免费在线观看av| 91九色蝌蚪成人| 大胆人体一区| www.日韩视频| 亚洲成人av综合| 日韩欧美精品免费在线| 日韩av网站在线播放| 成人精品视频一区二区三区尤物| 国产乱子夫妻xx黑人xyx真爽| 久久福利综合| 国产一区喷水| 久久久久黄色| 91av福利视频| 黄色免费在线网站| 国产偷国产偷亚洲清高网站| 国产精品视频a| 欧美日韩国内自拍| 三级黄色录像视频| 91亚洲精品久久久蜜桃网站| 国产一区二区在线观看免费视频| 国模大胆一区二区三区| 日韩欧美手机在线| 都市激情久久| 亚洲a区在线视频| 亚洲成人激情社区| 国产做受高潮69| 69xxxx欧美| 日韩av在线高清| 国产日韩在线观看一区| 欧美日韩综合视频| 久久久久久久久久91| 国产农村妇女毛片精品久久麻豆| 国产一精品一aⅴ一免费| 久久超级碰视频| 熟女人妇 成熟妇女系列视频| 国模吧视频一区| 精品国产三级a∨在线| 九九亚洲视频| 精品国产乱码久久久久久郑州公司 | 亚洲av毛片成人精品| 制服丝袜亚洲色图| 日韩中文字幕高清| 黄网动漫久久久| 国产在线免费视频| 亚洲色图视频网| 亚洲色图日韩精品| 国产色婷婷亚洲99精品小说| 国产视频久久久久久| 国产高清久久久久| 亚洲网中文字幕| 久久99最新地址| 亚洲这里只有精品| 日韩精品电影一区亚洲| 欧美 日韩精品| 99热这里只有精品8| av片在线免费| 五月天综合网站| 一区二区不卡在线| 久久在线视频| 一本色道久久综合亚洲精品婷婷| 精品99在线| 色一情一乱一伦一区二区三区| 欧美激情在线精品一区二区三区| 国内精品二区| 日韩美女国产精品| 久久综合伊人77777麻豆| 欧美日韩导航| 蜜桃欧美视频| 精品国产一级毛片| 特级西西444www大精品视频| 欧美亚洲激情| 一区二区精品在线观看| 91欧美在线| 无码毛片aaa在线| 欧美日本一区| 97在线国产视频| 国产日本精品| 黑鬼大战白妞高潮喷白浆| 日韩在线一二三区| 777一区二区| 国产99久久精品| 男男做爰猛烈叫床爽爽小说| 91美女片黄在线观看91美女| 亚洲精品成人无码| 国产精品成人午夜| 青娱乐国产在线视频| 亚洲香蕉伊在人在线观| 欧美h在线观看| 欧美三电影在线| 国产av一区二区三区| 精品电影一区二区三区| 日本在线丨区| 三级精品视频久久久久| 中文字幕中文字幕在线中高清免费版 | 日韩在线卡一卡二| 亚洲一区二区偷拍| 成人免费视频一区| 亚洲一区二区三区日韩| 中文字幕视频一区| 欧美精品xxxxx| 色综合天天综合给合国产| 国产又粗又黄又爽| 亚洲成av人乱码色午夜| 国内精品在线视频| 欧美乱大交xxxxx另类电影| 女厕盗摄一区二区三区| 国产精品成av人在线视午夜片| 国产视频一区二| 久久精品欧美| 91精品蜜臀一区二区三区在线| 久久久亚洲国产精品| 日本不卡在线视频| 亚洲国产精品第一页| 欧美韩日一区二区三区四区| 欧美国产在线看| 在线中文字幕不卡| 亚洲精品久久久久久无码色欲四季| 亚洲免费视频网站| 污片在线免费观看| 国产精品久久综合av爱欲tv| 亚洲精品一区二区三区中文字幕 | 八戒八戒神马在线电影| 欧洲成人免费视频| 无码国模国产在线观看| 神马一区二区影院| 99精品免费网| 18深夜在线观看免费视频| 国产目拍亚洲精品99久久精品| 久草视频中文在线| 欧美日韩成人综合在线一区二区| 天堂中文在线资源| 米奇精品一区二区三区在线观看| 欧美三区四区| 精品一区二区不卡| 欧美精选一区| www.污网站| 国产精品女人毛片| 国产精品久久久久久人| 亚洲高清一二三区| 午夜小视频在线观看| 国产色婷婷国产综合在线理论片a| 日韩高清一级| 亚洲 自拍 另类小说综合图区| 精品一区二区三区蜜桃| 老头老太做爰xxx视频| 欧美体内谢she精2性欧美| 国产 日韩 欧美 精品| 欧美成人性色生活仑片| 日本久久久久| 亚洲一区二区三区午夜| 三级不卡在线观看| 9.1成人看片免费版| 精品免费在线视频| 日韩中文字幕影院| 午夜精品久久久99热福利| 99精品中文字幕在线不卡| 欧美a级黄色大片| 国产一区二区精品久久91| 日韩三级在线观看视频| 在线电影欧美成精品| 男人天堂久久久| 国产综合香蕉五月婷在线| 手机亚洲手机国产手机日韩| 日本中文字幕高清| 国产精品丝袜91| 一级特黄aaa| www国产91| 视频二区欧美| 4444亚洲人成无码网在线观看| 国产精品一二三四| 久久综合亚洲色hezyo国产| 精品日韩99亚洲| 天堂√中文最新版在线| 欧美日韩国产综合在线| 丝袜亚洲另类丝袜在线| 欧美丰满美乳xxⅹ高潮www| 精品视频在线看| 国产传媒在线播放| 高清av免费一区中文字幕| 激情综合中文娱乐网| 欧美熟妇精品一区二区蜜桃视频| 亚洲成人你懂的| 黄色网址在线播放| 国产精品一区二区性色av| 国产精品毛片一区二区在线看| 伊人成人免费视频| 亚洲一级在线观看| 日本国产在线| 国产在线观看不卡| 欧美色一级片| 18禁裸乳无遮挡啪啪无码免费| 在线观看av一区二区| 精品176二区| 国产综合 伊人色| 日韩电影在线观看电影| 欧美在线视频第一页| 亚洲第一网站男人都懂| 欧美最新精品| 亚洲av首页在线| 成人国产精品免费网站| 亚洲中文字幕无码爆乳av| 日韩中文字幕在线播放| 99久久人爽人人添人人澡| 国产精品99久久免费黑人人妻| 国产精品黄色在线观看| 丰满熟妇乱又伦| 国产精品999| 欧美一区在线看| 中文字幕被公侵犯的漂亮人妻| 91精品国产综合久久婷婷香蕉 | 国产欧美 在线欧美| 激情六月综合| www.com.av| 精品视频久久久久久| 久久久久毛片免费观看| 人妻有码中文字幕| 一区二区三区 在线观看视频| 国产在线资源| 国产日韩亚洲精品| 国产乱人伦精品一区二区在线观看| 日韩乱码一区二区| 久久精品国产免费观看| 国产午夜一区|