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

系統干崩了,只認代碼不認人

系統
為了保障系統的高可用和穩定,我發誓以后只認代碼不認人。文末總結了幾個小教訓,希望對你有幫助。

各位朋友聽我一句勸,寫代碼提供方法給別人調用時,不管是內部系統調用,還是外部系統調用,還是被動觸發調用(比如MQ消費、回調執行等),一定要加上必要的條件校驗。千萬別信某些同事說的這個條件肯定會傳、肯定有值、肯定不為空等等。這不,臨過年了我就被坑了一波,弄了個生產事故,年終獎基本是涼了半截。

為了保障系統的高可用和穩定,我發誓以后只認代碼不認人。文末總結了幾個小教訓,希望對你有幫助。

一、事發經過

我的業務場景是:業務A有改動時,發送MQ,然后應用自身接受到MQ后,再組合一些數據寫入到Elasticsearch。以下是事發經過:

(1) 收到一個業務A的異常告警,當時的告警如下:

(2) 咋一看覺得有點奇怪,怎么會是Redis異常呢?然后自己連了下Redis沒有問題,又看了下Redis集群,一切正常。所以就放過了,以為是偶然出現的網絡問題。

(3) 然后技術問題群里 客服 反饋有部分用戶使用異常,我警覺性的感覺到是系統出問題了。趕緊打開了系統,確實有偶發性的問題。

(4) 于是我習慣性的看了幾個核心部件:

  • 網關情況、核心業務Pod的負載情況、用戶中心Pod的負載情況。
  • Mysql的情況:內存、CPU、慢SQL、死鎖、連接數等。

(5) 果然發現了慢SQL和元數據鎖時間過長的情況。找到了一張大表的全表查詢,數據太大,執行太慢,從而導致元數據鎖持續時間太長,最終數據庫連接數快被耗盡。

SELECT xxx,xxx,xxx,xxx FROM 一張大表

(6) 立馬Kill掉幾個慢會話之后,發現系統仍然沒有完全恢復,為啥呢?現在數據庫已經正常了,怎么還沒完全恢復呢?又繼續看了應用監控,發現用戶中心的10個Pod里有2個Pod異常了,CPU和內存都爆了。難怪使用時出現偶發性的異常呢。于是趕緊重啟Pod,先把應用恢復。

(7) 問題找到了,接下來就繼續排查為什么用戶中心的Pod掛掉了。從以下幾個懷疑點開始分析:

  • 同步數據到Elasticsearch的代碼是不是有問題,怎么會出現連不上Redis的情況呢?
  • 會不會是異常過多,導致發送異常告警消息的線程池隊列滿了,然后就OOM?
  • 哪里會對那張業務A的大表做不帶條件的全表查詢呢?

(8) 繼續排查懷疑點a,剛開始以為:是拿不到Redis鏈接,導致異常進到了線程池隊列,然后隊列撐爆,導致OOM了。按照這個設想,修改了代碼,升級,繼續觀察,依舊出現同樣的慢SQL 和 用戶中心被干爆的情況。因為沒有異常了,所以懷疑點b也可以被排除了。

(9) 此時基本可以肯定是懷疑點c了,是哪里調用了業務A的大表的全表查詢,然后導致用戶中心的內存過大,JVM來不及回收,然后直接干爆了CPU。同時也是因為全表數據太大,導致查詢時的元數據鎖時間過長造成了連接不能夠及時釋放,最終幾乎被耗盡。

(10) 于是修改了查詢業務A的大表必要校驗條件,重新部署上線觀察。最終定位出了問題。

二、問題的原因

因為在變更業務B表時,需要發送MQ消息( 同步業務A表的數據到ES),接受到MQ消息后,查詢業務A表相關連的數據,然后同步數據到Elasticsearch。

但是變更業務B表時,沒有傳業務A表需要的必要條件,同時我也沒有校驗必要條件,從而導致了對業務A的大表的全表掃描。因為:

某些同事說,“這個條件肯定會傳、肯定有值、肯定不為空...”,結果我真信了他!!!

由于業務B表當時變更頻繁,發出和消費的MQ消息較多,觸發了更多的業務A的大表全表掃描,進而導致了更多的Mysql元數據鎖時間過長,最終連接數消耗過多。

同時每次都是把業務A的大表查詢的結果返回到用戶中心的內存中,從而觸發了JVM垃圾回收,但是又回收不了,最終內存和CPU都被干爆了。

至于Redis拿不到連接的異常也只是個煙霧彈,因為發送和消費的MQ事件太多,瞬時間有少部分線程確實拿不到Redis連接。

最終我在消費MQ事件處的代碼里增加了條件校驗,同時也在查詢業務A表處也增加了的必要條件校驗,重新部署上線,問題解決。

三、總結教訓

經過此事,我也總結了一些教訓,與君共勉:

(1) 時刻警惕線上問題,一旦出現問題,千萬不能放過,趕緊排查。不要再去懷疑網絡抖動問題,大部分的問題,都跟網絡無關。

(2) 業務大表自身要做好保護意識,查詢處一定要增加必須條件校驗。

(3) 消費MQ消息時,一定要做必要條件校驗,不要相信任何信息來源。

(4) 千萬別信某些同事說,“這個條件肯定會傳、肯定有值、肯定不為空”等等。為了保障系統的高可用和穩定,咱們只認代碼不認人。

(5) 一般出現問題時的排查順序:

  • 數據庫的CPU、死鎖、慢SQL。
  • 應用的網關和核心部件的CPU、內存、日志。

(6) 業務的可觀測性和告警必不可少,而且必須要全面,這樣才能更快的發現問題和解決問題。

責任編輯:趙寧寧 來源: 不焦躁程序員
相關推薦

2020-02-17 20:18:25

Java代碼加個空行

2020-02-19 11:16:40

Javaclass代碼

2024-11-11 14:57:56

JWTSession微服務

2012-08-06 09:46:04

2023-10-30 08:10:26

Map存儲信息

2022-11-18 07:40:57

2021-08-02 08:30:41

頁面網頁代碼

2018-08-16 11:03:22

電競顯示器誤區

2023-11-29 08:26:38

2023-10-13 22:03:32

AI訓練

2010-06-07 21:26:22

賽門鐵克諾頓網絡安全

2015-11-04 10:25:14

WiFi黑科技感知

2021-03-01 08:05:09

慢查詢SQL

2018-04-23 09:48:37

SSD閃存顆粒

2021-07-14 07:41:54

B站A站服務器

2021-06-07 18:00:46

淘寶移動應用

2015-05-12 10:34:45

2019-12-24 09:44:02

界面12306系統

2012-03-23 09:39:35

微軟IE瀏覽器

2022-10-25 17:53:09

Java線程池
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费影院 | 国产一区免费 | 日日操网站 | av电影一区二区 | 狠狠热视频 | 欧美成人激情视频 | 欧美二级 | 97超碰站| 国产精品一区二区三区四区 | 日韩av中文| 欧美成人精品一区二区男人看 | 欧美日韩淫片 | 成人av一区 | 欧美一区二区三区在线免费观看 | 中文字字幕在线中文乱码范文 | 国产黄色一级电影 | 国产精品资源在线 | 毛片日韩 | 一区二区三区久久久 | 成人综合一区二区 | 中文字幕亚洲免费 | 国产情品 | 成人国产免费观看 | 国产区在线观看 | 91黄色免费看 | 国产在线观看一区 | 天天操精品视频 | 国产福利91精品 | 日韩一区二区在线看 | 人妖av | 99久久精品国产一区二区三区 | 亚洲精品久久久久久久久久久久久 | 精品国产一区二区三区性色av | 亚洲精品久久久蜜桃 | 中文字幕高清一区 | 三级特黄特色视频 | 久久亚洲一区二区三区四区 | 特级毛片www| 午夜免费精品视频 | 免费骚视频 | 九九色综合 |