国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

記一次線上Java程序故障驚心動魄兩小時

開發 前端
當我起來收拾好一切準備出發的時候,我瞄了一眼手機,發現手機的郵箱里有一份報警郵件,報警郵件顯示線上最近10分鐘流量有異常,而且是多個渠道。有突然有一種不祥的預感:線上kafka出問題了。

周日早上醒來,明媚的陽光從臥室的窗戶直射進來,久違的好天氣。穿好衣服我開始籌劃今天去哪里轉轉。一周忙碌的工作幾乎沒有時間陪家人,今天該好好陪陪家人了。

當我起來收拾好一切準備出發的時候,我瞄了一眼手機,發現手機的郵箱里有一份報警郵件,報警郵件顯示線上最近10分鐘流量有異常,而且是多個渠道。有突然有一種不祥的預感:線上kafka出問題了。我讓媳婦和孩子下樓在車里等我,我趕緊打開了電腦,查看線上系統。果然不出意外,kafka已經積壓了幾千萬的數據。因為我們的業務分為實時數據和離線數據,實時數據是FileBeat負責收集日志發到Kafka,然后我們這個業務系統消費Kafka統計數據,實時數據對于當前流量分析、預算控制、熔斷有非常重要的作用,如果實時數據異常,其它業務系統都會受到一定的影響。

定位到報警郵件是由于kafka消息積壓而導致實時數據異常觸發的,我立馬連上了我們消費Kafka的業務系統(data-collect)。這是一個運行時間很長了的Java服務,它的作用就是實時消費kafka數據,然后經過一定的業務邏輯處理,將最終結果更新到mongodb中。進到服務器以后,我發現這個服務已經處于假死狀態,最后一條日志顯示系統發生了OOM,也就是服務器內存爆了。

 

記一次線上Java程序故障驚心動魄兩小時

關于data-collect這個Java服務的核心邏輯我在這里詳細說明一下。這個系統的代碼是很早的一位同事寫的,因為早期我們的數據體量還不是很大,所以,他采用了一種簡單的處理方式。先消費數據,處理完成以后放到一個Map中,然后,啟動了一個每10s執行一次的定時任務,定時任務讀取Map數據更新到mongo中,然后清空Map(ConcurrentMap)。這樣做的優點是將消費Kafka的操作和入庫操作分開了,可以防止因為入庫時間太長而導致消費速度變慢,但是,這種做法有一個致命的缺點:內存不可控。如果定時任務因為Mongo操作時間太長而沒有及時清空Map,Map中會積累大量的數據,最終耗盡內存,系統發生OOM。這時候如果系統自啟了,也會丟失大量的數據。

其實,這個問題我很早有意識到,但是系統一直運行良好,沒有出現任何問題,我們認為在現有數據體量下它是安全的。而碰巧的是,就在前一天我們升級了Mongo的配置,mongo機器進行了一個主從切換。同時,有一些大表清理和TTL索引重建的工作還在mongo后臺運行。這就導致了我們操作mongo耗時的增加。進而導致了我們一直認為安全的系統出現了這個問題。

回到data-collect這個系統的設計上。可能有的同學會在這里有個疑問,為什么不直接消費出來就入庫操作呢?這里我們有一個重要的處理邏輯:為了防止頻繁的更新mongo,我們會將消費出來的數據在內存中進行一個合并處理,你可以簡單的理解為一個Map,如果key存在,我們就進行++的操作。最終操作mongo是$inc的操作,不是insert和update的操作。這也是我們需要一個ConcurrentMap的原因。也就是我們大概消費了1000萬條數據,但是最終我們處理完成以后只有10萬條數據,很多key相同的數據我們都進行了合并處理,這樣我們mongo的操作就減少了很多。

data-collect發生了OOM,我只能第一時間重啟,重啟以后,消費正常,系統開始有了數據。但是大概運行了幾分鐘以后,又發生了OOM。原因很簡單:kafka積壓的了大量的消息,消費很快,但是異步如mongo太耗時,所以導致數據全部擠壓在了這個Map內存中。看到這里,我想只能動手改造代碼了。改造的最終要達到的結果是:系統在不發生OOM的前提下,消費積壓在kafka中的數據,完成mongo操作。

改造的思路很簡單,就是干掉定時任務。在消費kafka消息中增加一個邏輯,每當消費消息并且內存進行數據合并完成以后,我們判斷Map的大小,如果Map的大小超過我們設定的限制以后,開始觸發mongo操作。之前的代碼mongo操作是單線程執行,為了提升mongo插入操作,我們開啟20個線程并行執行,所以我們這里需要一個帶阻塞隊列的線程池。改造后的代碼如下:

 

記一次線上Java程序故障驚心動魄兩小時

這里是SpringBoot集成Kafka的消費代碼。

 

記一次線上Java程序故障驚心動魄兩小時

 

記一次線上Java程序故障驚心動魄兩小時

這是內存處理完成以后入mongo的操作。因為我們的topic有20個分區,所以代碼中的listenPartition0是多線程執行的。如果沒有synchronized的同步代碼塊,那assembleyAdxTrafficVo方法就會多線程執行,這就會導致數據重復插入mongo,具體大家可以體會assembleyAdxTrafficVo方法的邏輯。

而插入mongo操作的用了線程池ExecutorService,注意這里我們executorService對象的定義。

 

記一次線上Java程序故障驚心動魄兩小時

 

記一次線上Java程序故障驚心動魄兩小時

為什么要自己定義一個阻塞隊列CustomeBlockQueue?這相比很多人碰到過這個問題,如果采用默認的阻塞隊列,例如:ArrayBlockingQueue,當隊列長度長度超過設置的值時,ArrayBlockingQueue會拒絕新的數據進入,并且拋出異常,所以我們需要自己定義CustomeBlockQueue,并且重寫他的offer方法(BlockingQueue默認采用offer方法將元素增加到隊列),offer方法不會阻塞,put方法會阻塞,所以我們需要重寫offer方法,并且內部采用put方法實現。關于這一點,大家可以多嘗試。ArrayBlockingQueue和LinkedBlockingQueue都有很多坑等大家去踩。

按照上述代碼處理完成上線以后,系統開始正常運行,kafka積壓的消息也開始慢慢降低,系統趨于恢復正常,而這時已經是12點了,驚心動魄的2小時總算過去了,阿彌陀佛。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2017-09-01 09:17:51

DNS緩存慘案

2025-11-10 07:29:30

2018-01-07 01:39:32

2019-08-05 10:15:33

系統緩存架構

2018-12-14 10:46:55

2009-05-08 08:59:47

微軟Windows 7操作系統

2022-12-17 19:49:37

GCJVM故障

2021-01-08 13:52:15

Consul微服務服務注冊中心

2023-01-04 18:32:31

線上服務代碼

2017-11-01 16:15:23

SQL優化權限類型案例

2021-12-02 07:50:30

NFS故障內存

2021-05-26 11:06:06

Kubernetes網絡故障集群節點

2020-11-16 07:19:17

線上函數性能

2021-11-23 21:21:07

線上排查服務

2009-07-28 09:18:17

2020-10-14 11:37:07

MAXHUB

2020-07-13 09:05:47

2025-04-02 04:33:00

CPU服務器時鐘頻率

2014-12-19 16:08:18

2010-09-11 11:12:23

點贊
收藏

51CTO技術棧公眾號

91久久精品一区二区| 欧美日韩在线一区二区| 亚洲一区二区三区777| 日韩精品毛片| 久久日一线二线三线suv| 岛国视频一区| 日韩精品在线观看一区| 麻豆一区二区三区视频| 久久久久99| 国产精品日日做人人爱| 3d动漫一区二区三区在线观看| 69堂精品视频| 亚洲有码转帖| 国产欧美日韩亚州综合 | 欧美四级电影在线观看| 日本久久精品一区二区| 免费成人av在线播放| 亚洲www视频| 日韩母乳在线| 久久久国产影院| 在线最新版中文在线| 日韩欧美极品在线观看| 国产精品三级a三级三级午夜| 成人精品视频.| 亚洲人成绝费网站色www| 在线观看h视频| 国产清纯白嫩初高生在线观看91 | 99久热re在线精彩视频| 国产午夜精品一区二区三区嫩草| 一区二区在线观| 亚洲一区中文| 91香蕉国产在线观看| 奇米狠狠一区二区三区| 久久久久久久久久久免费精品| 成人免费网站www网站高清| 亚洲精品福利视频| 欧美人体视频xxxxx| 日韩一区二区三区在线| 欧美成人视屏| 欧美日本高清视频在线观看| 成人精品一区二区三区校园激情 | 四虎在线精品| www.欧美三级电影.com| www成人在线视频| 亚洲区在线播放| 国产超碰精品| 色哟哟网站入口亚洲精品| jizz免费一区二区三区| 精品国内亚洲在观看18黄| 日韩午夜电影免费看| 欧美精品在线免费| 丁香5月婷婷久久| 91精品国产高清久久久久久| 老汉色老汉首页av亚洲| 国产精品久久999| 综合精品久久| 蜜桃成人在线| 久久丁香综合五月国产三级网站| 亚洲精品第一区二区三区| 日韩欧美视频在线播放| 5g国产欧美日韩视频| 9久re热视频在线精品| 日韩一级在线观看| 黄网站在线免费| 精品国产乱码91久久久久久网站| 桃子视频成人app| 97色在线观看| 欧美日韩理论| 国产成年人在线观看| 久久激情电影| 亚洲精品成人网| 偷拍视频一区二区三区| 欧美精品免费在线观看| 波多野结衣在线观看一区二区三区 | 日韩欧美精品网站| 蜜桃视频在线观看免费视频网站www| 日韩一区二区在线观看| 日本精品裸体写真集在线观看| 久操成人在线视频| 日韩欧美一区二区三区免费看| 国产精品区一区| 国内外成人在线| 亚洲综合欧美在线| 亚洲色成人一区二区三区小说| 97福利电影| 亚洲一区二区三区四区五区黄| 高清av在线| 亚洲国产私拍精品国模在线观看| 91精品视频一区二区| 国产精品日韩在线播放| 蜜桃精品视频在线观看| 2020中文字幕在线| 欧美v日韩v国产v| y111111国产精品久久久| 亚洲福利视频专区| 成人午夜毛片| 成人免费福利在线| 国产激情视频一区二区在线观看 | 高清福利在线观看| 中国china体内裑精亚洲片| 欧美日韩国产免费观看视频| 欧美aaaaa喷水| 97se亚洲国产综合在线| 四虎影院在线域名免费观看| 精品亚洲一区二区三区在线观看| 欧美女优在线视频| 黄色一级片av| 欧美视频在线观看 亚洲欧| 暖暖成人免费视频| 亚洲在线观看视频| 久久精品一区四区| av免费网站在线| 国产精品视频久久久| 99这里只有精品| 手机电影在线观看| 91精品啪在线观看麻豆免费| 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品欧美一区二区三区| 欧美韩日一区二区三区| 波多野结衣中文在线| 国产在线精品播放| 久久免费看少妇高潮| 日本理论片午伦夜理片在线观看| 日韩av片永久免费网站| 成人天堂资源www在线| 黄视频在线观看网站| 国产精品黄色影片导航在线观看| 成人福利视频网站| 啪啪免费视频一区| 超碰97在线资源| 亚洲在线视频一区| 精品一区二区三区亚洲| 九九九久久久久久| 免费在线看成人av| 天堂a中文在线| 欧洲亚洲妇女av| 91丨九色丨蝌蚪丨老版| 国产在线天堂www网在线观看| 国产精品大全| 欧美日韩国产中文精品字幕自在自线| 亚洲精品视频一二三区| 日本特级黄色大片| 日韩西西人体444www| 欧美日本三区| 黄网站app在线观看大全免费视频| 久热精品视频在线免费观看| 国产一区二区在线视频| 青草青在线视频| 女同一区二区| 91精品一区二区三区久久久久久| 国产精品久久久久一区二区三区厕所| 色成人亚洲网| 97视频在线免费观看| 国产三级精品三级在线专区| 祥仔av免费一区二区三区四区| 日韩人妻一区二区三区蜜桃视频| 亚洲国产精品悠悠久久琪琪 | 色播视频在线观看| 国产福利精品av综合导导航| 在线精品小视频| 黄色高清在线观看| 欧美中文在线视频| 亚洲欧美一区二区三区国产精品| 国产精品极品| 国产国语**毛片高清视频| 青青草原一区二区| 亚洲曰韩产成在线| 999久久久91| 男人天堂亚洲二区| 国产成人精品日本亚洲11| 欧美午夜理伦三级在线观看| 亚洲午夜av| 欧美v亚洲v| 最近免费观看高清韩国日本大全| 国产精品视频在线看| 91精品丝袜国产高跟在线| 高清一区在线观看| 国产97免费视| 欧洲av在线精品| 日韩成人午夜精品| 成人看片毛片免费播放器| 激情综合网俺也去| 国产精品免费电影| 欧美蜜桃一区二区三区| 一区二区三区视频免费视频观看网站| 男人日女人bb视频| 97精品视频在线播放| 精品国产999| 久久先锋影音| 青青国产精品| 三级国产三级在线| 亚洲国产精品www| 久久综合88中文色鬼| 一区二区三区在线看| 欧美男体视频| 大肉大捧一进一出好爽动态图| 欧美在线一级视频| 欧美日韩成人综合在线一区二区| 最新日韩一区| 国产一区高清|