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

記一次線程池引發(fā)的故障 排查下來是誰的鍋

網(wǎng)絡(luò) 通信技術(shù)
敖丙之前在工作中遇到一個問題,我定義了一個線程池來執(zhí)行任務(wù),但是程序執(zhí)行結(jié)束后任務(wù)沒有全部執(zhí)行完,當時心態(tài)就差點崩了。

本文轉(zhuǎn)載自微信公眾號「 三太子敖丙」,轉(zhuǎn)載本文請聯(lián)系 三太子敖丙公眾號。

[[329971]]

 背景

敖丙之前在工作中遇到一個問題,我定義了一個線程池來執(zhí)行任務(wù),但是程序執(zhí)行結(jié)束后任務(wù)沒有全部執(zhí)行完,當時心態(tài)就差點崩了。

 

業(yè)務(wù)場景是這樣的:由于統(tǒng)計業(yè)務(wù)需要,訂單信息需要從主庫中經(jīng)過統(tǒng)計業(yè)務(wù)代碼寫入統(tǒng)計庫(中間需要邏輯處理所以不能走binlog)。

由于代碼質(zhì)量及歷史原因,目前的重新統(tǒng)計接口是單線程的,粗略算了算一共有100萬條訂單信息,每100條的處理大約是10秒,所以理論上處理完全部信息需要28個小時,這還不算因為 mysql 中 limit 分頁導(dǎo)致的后期查詢時間以及可能出現(xiàn)的內(nèi)存溢出導(dǎo)致中止統(tǒng)計的情況。

基于上述的原因,以及最重要的一點:統(tǒng)計業(yè)務(wù)是根據(jù)訂單所屬的中心進行的,各個中心同時統(tǒng)計不會導(dǎo)致臟數(shù)據(jù)。

所以,我計劃使用線程池,為每一個中心分配一條線程去執(zhí)行統(tǒng)計業(yè)務(wù)。

業(yè)務(wù)實現(xiàn)

  1. // 線程工廠,用于為線程池中的每條線程命名 
  2. ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("stats-pool-%d").build(); 
  3.  
  4. // 創(chuàng)建線程池,使用有界阻塞隊列防止內(nèi)存溢出 
  5. ExecutorService statsThreadPool = new ThreadPoolExecutor(5, 10, 
  6.                 0L, TimeUnit.MILLISECONDS, 
  7.                 new LinkedBlockingQueue<>(100), namedThreadFactory); 
  8. // 遍歷所有中心,為每一個centerId提交一條任務(wù)到線程池 
  9. statsThreadPool.submit(new StatsJob(centerId)); 

在創(chuàng)建完線程池后,為每一個 centerId 提交一條任務(wù)到線程池,在我的預(yù)想中,由于線程池的核心線程數(shù)為5,最多5個中心同時進行統(tǒng)計業(yè)務(wù),將大大縮短100萬條數(shù)據(jù)的總統(tǒng)計時間,于是萬分興奮的我開始執(zhí)行重新統(tǒng)計業(yè)務(wù)了。

問題

在跑了很久之后,當我查看統(tǒng)計進度時,我發(fā)現(xiàn)了一個十分詭異的問題(如下圖)。

藍框標出的這條線程是 WAIT 狀態(tài),表明這條線程是空閑狀態(tài),但是從日志中我看到這條線程并沒有完成它的任務(wù),因為這個中心的數(shù)據(jù)有10萬條,但是日志顯示它只跑到了一半,之后就再無關(guān)于此中心的日志了。

 

記一次線程池故障,害阿里程序員差點被開除

 

這是什么原因?

我當場就想到了三歪,肯定是三歪今天早上上班左腳先邁進公司的,導(dǎo)致代碼水土不服,一定是這樣,我去找他去。

 

調(diào)試及原因

咳咳三歪是開玩笑的,我們還是需要找到真實原因。

可以想到的是,這條線程因為某些原因被阻塞了,并且沒有繼續(xù)進行下去,但是日志又沒有任何異常信息…

可能有經(jīng)驗的工程師已經(jīng)知道了原因…

由于個人水平的線程,暫時沒有找到原因的我只能放棄使用線程池,乖乖用單線程跑…

幸運的是,單線程跑的任務(wù)竟然拋錯了(為什么要說幸運?),于是馬上想到,之前那條 WAIT 狀態(tài)的線程可能是因為同樣的拋錯所以被中斷了,導(dǎo)致任務(wù)沒有繼續(xù)進行下去。

為什么說幸運?因為如果單線程的任務(wù)沒有拋錯的話,我可能很久都想不到是這個原因。

 

深入探究線程池的異常處理

工作上的問題到這里就找到原因了,之后的解決過程也十分簡單,這里就不提了。

但是疑問又來了,為什么使用線程池的時候,線程因異常被中斷卻沒有拋出任何信息呢?還有平時如果是在 main 函數(shù)里面的異常也會被拋出來,而不是像線程池這樣被吞掉。

如果子線程拋出了異常,線程池會如何進行處理呢?

我提交任務(wù)到線程池的方式是: threadPoolExecutor.submit(Runnbale task); ,后面了解到使用 execute() 方式提交任務(wù)會把異常日志給打出來,這里研究一下為什么使用 submit 提交任務(wù),在任務(wù)中的異常會被“吞掉”。

對于 submit() 形式提交的任務(wù),我們直接看源碼:

  1. public Future<?> submit(Runnable task) { 
  2.     if (task == null) throw new NullPointerException(); 
  3.     // 被包裝成 RunnableFuture 對象,然后準備添加到工作隊列 
  4.     RunnableFuture<Void> ftask = newTaskFor(task, null); 
  5.     execute(ftask); 
  6.     return ftask; 

它會被線程池包裝成 RunnableFuture 對象,而最終它其實是一個 FutureTask 對象,在被添加到線程池的工作隊列,然后調(diào)用 start() 方法后, FutureTask 對象的 run() 方法開始運行,即本任務(wù)開始執(zhí)行。

  1. public void run() { 
  2.     if (state != NEW || !UNSAFE.compareAndSwapObject(this,runnerOffset,null, Thread.currentThread())) 
  3.         return
  4.     try { 
  5.         Callable<V> c = callable; 
  6.         if (c != null && state == NEW) { 
  7.             V result; 
  8.             boolean ran; 
  9.             try { 
  10.                 result = c.call(); 
  11.                 ran = true
  12.             } catch (Throwable ex) { 
  13.                 // 捕獲子任務(wù)中的異常 
  14.                 result = null
  15.                 ran = false
  16.                 setException(ex); 
  17.             } 
  18.             if (ran) 
  19.                 set(result); 
  20.         } 
  21.     } finally { 
  22.         runner = null
  23.         int s = state; 
  24.         if (s >= INTERRUPTING) 
  25.             handlePossibleCancellationInterrupt(s); 
  26.     } 

在 FutureTask 對象的 run() 方法中,該任務(wù)拋出的異常被捕獲,然后在setException(ex); 方法中,拋出的異常會被放到 outcome 對象中,這個對象就是 submit() 方法會返回的 FutureTask 對象執(zhí)行 get() 方法得到的結(jié)果。

但是在線程池中,并沒有獲取執(zhí)行子線程的結(jié)果,所以異常也就沒有被拋出來,即被“吞掉”了。

這就是線程池的 submit() 方法提交任務(wù)沒有異常拋出的原因。

線程池自定義異常處理方法

在定義 ThreadFactory 的時候調(diào)用

setUncaughtExceptionHandler方法,自定義異常處理方法。例如:

  1. ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() 
  2.                 .setNameFormat("judge-pool-%d"
  3.                 .setUncaughtExceptionHandler((thread, throwable)-> logger.error("ThreadPool {} got exception", thread,throwable)) 
  4.                 .build(); 

這樣,對于線程池中每條線程拋出的異常都會打下 error 日志,就不會看不到了。

后續(xù)

在修復(fù)了單個線程任務(wù)的異常之后,我繼續(xù)使用線程池進行重新統(tǒng)計業(yè)務(wù),終于跑完了,也終于完成了這個任務(wù)。

事后我也叫三歪以后進公司一定要先邁出右腳進來,不然對寫代碼的風(fēng)水影響很大。

 

小結(jié):丙這個事故也給大家一個警示,使用線程池時需要注意,子線程的異常,如果沒有被捕獲就會丟失,可能會導(dǎo)致后期根據(jù)日志調(diào)試時無法找到原因。

 

責任編輯:武曉燕 來源: 三太子敖丙
相關(guān)推薦

2021-04-13 08:54:28

dubbo線程池事故排查

2022-12-17 19:49:37

GCJVM故障

2019-03-15 16:20:45

MySQL死鎖排查命令

2021-05-13 08:51:20

GC問題排查

2022-11-29 21:26:26

跨域配置

2021-08-20 11:35:04

服務(wù)運維 故障

2023-01-04 18:32:31

線上服務(wù)代碼

2018-08-07 10:54:02

HTTPS郵箱瀏覽器

2023-04-06 07:53:56

Redis連接問題K8s

2021-12-02 07:50:30

NFS故障內(nèi)存

2024-04-10 08:48:31

MySQLSQL語句

2021-11-23 21:21:07

線上排查服務(wù)

2017-12-19 14:00:16

數(shù)據(jù)庫MySQL死鎖排查

2024-06-28 10:01:04

2021-11-01 17:29:02

Windows系統(tǒng)Fork

2022-11-16 08:00:00

雪花算法原理

2021-01-08 13:52:15

Consul微服務(wù)服務(wù)注冊中心

2017-09-01 09:17:51

DNS緩存慘案

2018-07-03 10:49:22

性能故障排查

2021-03-29 12:35:04

Kubernetes環(huán)境TCP
點贊
收藏

51CTO技術(shù)棧公眾號

成年人网站av| 亚洲 日韩 国产第一区| 99视频在线看| 欧美色网址大全| 日韩欧美精品在线视频| 国产91在线免费| 在线免费观看的av网站| 懂色av中文一区二区三区| 欧美与欧洲交xxxx免费观看 | 九九热99久久久国产盗摄| 怡红院一区二区| 黑人一区二区三区| 精品国产91久久久久久| 致1999电视剧免费观看策驰影院| 人妻与黑人一区二区三区| 日韩av成人高清| 亚洲另类欧美自拍| 无码人妻丰满熟妇区毛片18| 91福利国产在线观看菠萝蜜| 久久精品水蜜桃av综合天堂| 国产91视觉| 97超碰人人草| 视频在线在亚洲| 欧美劲爆第一页| 91精品国产闺蜜国产在线闺蜜| 亚洲va久久久噜噜噜久久| 欧美一区二区三区在线看 | 精品一区二区精品| 国产91在线播放| 国产一级av毛片| 91精品国产视频| 伊人久久久久久久久久| xxxx黄色片| xvideos.蜜桃一区二区| 制服丝袜国产精品| 天堂网在线免费观看| 校园春色亚洲| 亚洲成在人线免费| 免费人成自慰网站| 国产在线高清理伦片a| 日本一区二区三级电影在线观看| 欧美日本国产精品| 日本福利在线观看| 99国产精品久| 精品国产一区二区三区日日嗨| www.久久成人| 国产一区999| 91亚洲精品在线| 国产又粗又长视频| 精彩视频一区二区三区| 国产精品久久久久久久av大片| 91精品国产高清一区二区三密臀| 99国产精品99久久久久久粉嫩| 欧美国产精品日韩| 国产一级二级三级视频| 激情成人综合| 91精品国产99久久久久久| 日干夜干天天干| 国产日韩视频| 欧美中文字幕在线观看| 欧美成人一区二区三区四区| 日韩高清欧美激情| 国产精品羞羞答答| 91中文字幕在线播放| 狠狠色丁香久久婷婷综合_中 | 红杏视频成人| 日韩av影片在线观看| 内射中出日韩无国产剧情| 日韩精品丝袜美腿| 亚洲无限av看| 一级性生活免费视频| 伊人情人综合网| 久久久久久久亚洲精品| 91精品国产乱码在线观看| 免费看黄裸体一级大秀欧美| 国产精品www色诱视频| 国产精品久久久久久久一区二区 | 99成人在线| 日韩免费视频在线观看| 中文字幕人妻色偷偷久久| 久草在线在线精品观看| 91网免费观看| 日韩亚洲视频在线观看| 国产精品美女久久久久久久网站| 香蕉精品视频在线| 免费在线国产视频| 色综合网色综合| 亚洲第一色av| 日本在线中文字幕一区| 中文字幕亚洲欧美日韩高清 | 色综合久久久网| 亚洲污视频在线观看| 日韩在线观看中文字幕| 日韩精品视频在线播放| 中文字幕资源站| av成人天堂| 91精品国产综合久久男男| 国产18精品乱码免费看| 欧美精彩视频一区二区三区| 色哟哟免费网站| 超碰一区二区| 日韩久久免费av| 波多野结衣一二三四区| 午夜久久福利| 国产成人在线视频| www.日本在线观看| 国产欧美一区二区精品秋霞影院| 亚洲精品少妇一区二区| 日韩三区免费| 亚洲第一区第一页| 婷婷伊人五月天| 久久久久中文| 国产精品视频在线免费观看| 色三级在线观看| 日韩欧美福利视频| avtt中文字幕| 久久一区91| 国产91色在线|免| 少妇人妻精品一区二区三区| 亚洲私人影院在线观看| 日本xxxxxxx免费视频| 66精品视频在线观看| 日韩性xxxx爱| а中文在线天堂| 99re这里都是精品| 国产美女作爱全过程免费视频| 欧美爱爱视频| 夜夜嗨av一区二区三区免费区| 国产精品999久久久| 国产一区999| 一级二级三级欧美| 中文字幕日本一区二区| 日韩久久精品成人| 日韩人妻无码一区二区三区99| 国产乱码精品一品二品| 一区二区三区四区不卡| 亚洲成人va| 亚洲一区999| 精人妻无码一区二区三区| 99久久精品国产毛片| 成人免费在线网| 97久久精品一区二区三区的观看方式 | 99在线无码精品入口| 国产精品久久久久9999吃药| 欧美 日本 亚洲| 麻豆精品国产| 一区国产精品视频| 中国一区二区视频| 国产精品天美传媒| 天堂一区在线观看| 成人情趣视频网站| 国产美女精品视频免费观看| 一广人看www在线观看免费视频| 欧美性受xxxx黑人xyx| 国产成人免费观看网站| 日本vs亚洲vs韩国一区三区二区| 日韩精品成人一区二区在线观看| 蜜桃精品在线| 日韩中文字幕精品视频| 国产尤物在线观看| 樱桃视频在线观看一区| 国产伦理在线观看| 亚洲精品视频啊美女在线直播| 精品视频一区二区| 午夜日韩成人影院| 日韩在线观看免费av| 99热在线只有精品| 午夜精品福利久久久| 亚洲专区区免费| 日本不卡一区二区三区高清视频| 在线视频一区观看| 超碰97久久国产精品牛牛| 97香蕉久久夜色精品国产| 你懂的视频在线| 欧美日韩一区二区三区高清| 亚洲一二三在线观看| 成人综合在线网站| 国产精品wwwww| 久久美女视频| 国产久一道中文一区| 在线免费三级电影网站| 中文字幕在线观看日韩| 国产成人精品无码高潮| 亚洲大片在线观看| 精品成人无码一区二区三区| 精品亚洲aⅴ乱码一区二区三区| www.夜夜爱| 国产精品密蕾丝视频下载| 国产日本欧美一区| 狂野欧美激情性xxxx欧美| 亚洲精品中文字幕女同| 国产精品一区二区人人爽| 午夜欧美2019年伦理| 男人天堂资源网| 成人一区二区三区中文字幕| 天天影视综合色| 国产一区观看| 亚洲欧美久久234| 成人性生交大片免费看96| 国产精品久久久久久久电影| 欧美另类tv| 视频在线一区二区| 日韩性xxxx| 91精品国产色综合久久不卡电影| 狠狠躁夜夜躁人人爽天天高潮| 国产精品三级av在线播放| 波多野结衣视频播放| 免费精品视频在线| 欧美性久久久久| 亚洲午夜精品久久久久久app| 日本一区二区三区四区高清视频| 中文字幕av一区二区三区四区| 国产精品午夜国产小视频| 欧美办公室脚交xxxx| 欧美成年人视频网站| 国产区在线视频| 日韩av在线免费观看| 国产深喉视频一区二区| 色婷婷综合久久久久中文一区二区| 一区视频免费观看| 欧美国产日韩a欧美在线观看| 日批免费观看视频| 韩国成人在线视频| 精品日韩久久久| 久久久久中文| 无码aⅴ精品一区二区三区浪潮| 激情欧美日韩| 国产曰肥老太婆无遮挡| 中文字幕一区二区三三| 亚洲春色综合另类校园电影| 在线一级成人| 久久av二区| 久久精品论坛| 韩国一区二区三区美女美女秀 | 国产一区自拍视频| 天堂va欧美ⅴa亚洲va一国产| 国产欧美婷婷中文| 国产成人福利夜色影视| 国产精品999| 日韩免费小视频| 国产精品草莓在线免费观看| 自拍视频在线看| 日本欧美中文字幕| 欧美电影h版| 国产成人欧美在线观看| 日韩不卡免费高清视频| 日韩美女免费线视频| 亚洲午夜天堂| 日韩免费观看网站| 欧美色999| 国产精品视频久久| 久久久久久久性潮| 成人精品视频久久久久| 国产精品美女久久久久人| 91综合免费在线| 亚洲国产欧美在线观看| 国产福利一区二区三区在线观看| 99国产精品久久一区二区三区| 高清视频在线观看一区| 奇米影视777在线欧美电影观看| 美脚丝袜一区二区三区在线观看| 天天操综合520| 日韩三级电影| 五月天久久久| 黄色三级中文字幕| 99精品国产福利在线观看免费| 水蜜桃色314在线观看| 免费亚洲一区| 日韩av卡一卡二| 国产毛片精品国产一区二区三区| 中文字幕avav| 91最新地址在线播放| 性欧美一区二区| 亚洲天堂av一区| 日韩精品一区二区三区国语自制| 欧美日韩在线影院| 伊人成人在线观看| 日韩三区在线观看| 色网站在线免费观看| 色妞色视频一区二区三区四区| 在线观看免费视频你懂的| 国产69精品久久久久9| 亚洲承认视频| 666精品在线| 美女亚洲一区| 麻豆一区二区三区在线观看| 国产欧美另类| 在线能看的av网站| av亚洲精华国产精华| 蜜桃av免费在线观看| 亚洲国产一区二区视频| 国产一级精品毛片| 欧美成人a∨高清免费观看| 免费在线观看一级毛片| 免费不卡在线观看av| 91精品韩国| 国产精品免费观看高清| 成人中文在线| 日韩av综合在线观看| 极品美女销魂一区二区三区免费| 亚洲国产果冻传媒av在线观看| 国产精品短视频| 国产又黄又猛又粗又爽| 欧美一区二区三区在线看| 黄色在线播放| 久久免费成人精品视频| 婷婷丁香久久| 日本一区二区三区视频免费看| 亚洲视频中文| 四季av一区二区三区| 91在线一区二区三区| 五月天激情丁香| 欧美亚洲免费在线一区| 国产又爽又黄网站亚洲视频123| 欧美xxxx18性欧美| 青青国产精品| 日产国产精品精品a∨| 亚洲美女色禁图| 日本少妇一级片| 亚洲视频一区二区免费在线观看| 无码人妻丰满熟妇奶水区码| 日韩av影视在线| 嗯啊主人调教在线播放视频 | 555www成人网| 一区三区自拍| 国产一区一区三区| 麻豆成人久久精品二区三区红| 亚洲做受高潮无遮挡| 亚洲sss视频在线视频| 国产成人免费看一级大黄| 色婷婷综合成人av| 欧美aaaaaa| 亚洲视频在线二区| 日本网站在线观看一区二区三区| 中文字幕一区二区久久人妻网站 | 久久精品视频16| 国产99久久久国产精品免费看| 亚洲少妇xxx| 欧美日韩成人在线一区| 爱久久·www| 国产精品国产三级国产专播精品人| 台湾佬综合网| 国产xxxxx在线观看| 2021中文字幕一区亚洲| 特级西西444www大精品视频免费看| 欧美大片顶级少妇| 日本动漫同人动漫在线观看| 91超碰在线电影| 欧美亚洲不卡| 色悠悠在线视频| 午夜不卡在线视频| 青春有你2免费观看完整版在线播放高清| 欧美精品激情在线观看| 欧美尿孔扩张虐视频| 久久久噜噜噜www成人网| 久久久久久久久久久久久女国产乱| 中文字幕黄色片| 一区二区三区天堂av| 欧美aaaaaaaa| 男人天堂新网址| 91亚洲精品一区二区乱码| 无码视频一区二区三区| 中文字幕欧美精品在线| 日韩08精品| 国产a级片网站| 久久久久久久久久看片| 怡红院男人天堂| 久热国产精品视频| 澳门久久精品| 国产一级不卡毛片| 一色桃子久久精品亚洲| www.久久成人| 日本精品久久久| 日韩伦理视频| 麻豆tv在线观看| 日本韩国视频一区二区| 免费观看在线午夜影视| 99影视tv| 噜噜噜久久亚洲精品国产品小说| 制服丨自拍丨欧美丨动漫丨| 欧美大胆一级视频| 伊人久久视频| 性做爰过程免费播放| 99久久免费视频.com| 中文字幕第三页| 欧美激情亚洲精品| 教室别恋欧美无删减版| 91视频免费入口| 欧美日韩亚洲一区二| 免费在线视频欧美| 国偷自产av一区二区三区小尤奈| 日本va欧美va瓶| 日韩精品视频播放| 久久精品91久久香蕉加勒比| 欧美调教视频| 毛片毛片毛片毛| 欧美性jizz18性欧美| 99热国产在线| 神马欧美一区二区| 成人精品电影在线观看|