2023.03.05 我們是這樣崩的
至暗時(shí)刻
2023年3月5日20:30,SRE收到大量服務(wù)和域名的接入層不可用報(bào)警,客服側(cè)開(kāi)始收到大量用戶反饋B站無(wú)法使用,同時(shí)內(nèi)部同學(xué)也反饋B站無(wú)法打開(kāi),甚至APP首頁(yè)也無(wú)法打開(kāi)?;趫?bào)警內(nèi)容,SRE第一時(shí)間懷疑機(jī)房、網(wǎng)絡(luò)、四層LB、七層SLB等基礎(chǔ)設(shè)施出現(xiàn)問(wèn)題,緊急發(fā)起語(yǔ)音會(huì)議,拉各團(tuán)隊(duì)相關(guān)人員開(kāi)始緊急處理(為了方便理解,下述事故處理過(guò)程做了部分簡(jiǎn)化)。
初因定位
啥都沒(méi)有。
原因說(shuō)明
背景
又有個(gè)【】把gcd參數(shù)傳了一個(gè)0。
根因

Lua 是動(dòng)態(tài)類型語(yǔ)言,常用習(xí)慣里變量不需要定義類型,只需要為變量賦值即可。
Lua在對(duì)一個(gè)數(shù)字字符串進(jìn)行算術(shù)操作時(shí),會(huì)嘗試將這個(gè)數(shù)字字符串轉(zhuǎn)成一個(gè)數(shù)字。
在 Lua 語(yǔ)言中,如果執(zhí)行數(shù)學(xué)運(yùn)算 n % 0,則結(jié)果會(huì)變?yōu)?nan(Not A Number)。
_gcd函數(shù)對(duì)入?yún)](méi)有做類型校驗(yàn),允許參數(shù)b傳入:"0"。同時(shí)因?yàn)?#34;0" != 0,所以此函數(shù)第一次執(zhí)行后返回是 _gcd("0",nan)。如果傳入的是int 0,則會(huì)觸發(fā)[ if b == 0 ]分支邏輯判斷,不會(huì)死循環(huán)。
_gcd("0",nan)函數(shù)再次執(zhí)行時(shí)返回值是 _gcd(nan,nan),然后Nginx worker開(kāi)始陷入死循環(huán),進(jìn)程 CPU 100%。
問(wèn)題分析
哈哈哈我也不知道
總結(jié)
此次事故發(fā)生時(shí),B站掛了迅速登上全網(wǎng)熱搜,作為技術(shù)人員,身上的壓力可想而知。事故已經(jīng)發(fā)生,我們能做的就是深刻反思,吸取教訓(xùn),總結(jié)經(jīng)驗(yàn),砥礪前行。
此篇作為“三五事故”系列之第一篇,向大家簡(jiǎn)要介紹了故障產(chǎn)生的誘因、根因、處理過(guò)程、優(yōu)化改進(jìn)。后續(xù)文章會(huì)詳細(xì)介紹“三五事故”后我們是如何執(zhí)行優(yōu)化落地的,敬請(qǐng)期待。
最后,想說(shuō)一句:多活的高可用容災(zāi)架構(gòu)確實(shí)生效了。

歡迎關(guān)注嗶哩嗶哩技術(shù)公眾號(hào)!
