日常Bug排查-流量全部下線
前言
日常Bug排查系列都是一些簡單Bug排查,筆者將在這里介紹一些排查Bug的簡單技巧,同時(shí)順便積累素材^_^。
Bug現(xiàn)場
一次快速發(fā)布,確導(dǎo)致業(yè)務(wù)跌0,還好是個(gè)小業(yè)務(wù),不然就GG了。

流量全部下線
由于我們發(fā)布分為兩組,在第二組發(fā)布的時(shí)候,業(yè)務(wù)跌0。很明顯的,第一反應(yīng)就是,第一組發(fā)布后流量并沒有上線成功,導(dǎo)致第二組流量下線的時(shí)候,產(chǎn)線沒有任何服務(wù)器提供服務(wù)。
為什么第一次發(fā)布時(shí)候沒有發(fā)上去
筆者詳細(xì)的檢查了一下發(fā)布的過程。發(fā)現(xiàn)我們的發(fā)布腳本是在tomcat啟動(dòng)腳本運(yùn)行完畢之后檢查進(jìn)程是否存在。如果存在,就表明應(yīng)用啟動(dòng)成功。然后就上線流量!
tomcat容器啟動(dòng)成功不代表應(yīng)用準(zhǔn)備完畢
這一看就發(fā)現(xiàn)了問題,tomcat容器啟動(dòng)是幾秒內(nèi)就能Okay的(外置的tomcat)容器。但是tomcat啟動(dòng)并且進(jìn)程存在并不代表應(yīng)用準(zhǔn)備就緒了。因?yàn)檫@時(shí)候Spring還在加載,如果是dubbo應(yīng)用的話,往zookeeper的臨時(shí)節(jié)點(diǎn)都還沒注冊,當(dāng)然上線流量會失?。?/p>
為什么會犯這種錯(cuò)誤
因?yàn)檫@個(gè)應(yīng)用原來是用jboss容器啟動(dòng)的,jboss容器的啟動(dòng)腳本會等內(nèi)部應(yīng)用準(zhǔn)備就緒之后才會返回。遷移到tomcat之后,tomcat腳本不等內(nèi)部應(yīng)用啟動(dòng)成功就返回。進(jìn)而讓發(fā)布者以為"發(fā)布"成功了!
應(yīng)該怎么做
在這種情況下,我們需要在tomcat容器中提供checkHealth這樣的接口,在checkHealth中檢查各種資源信息。等腳本checkHealth通過后,才能確認(rèn)應(yīng)用準(zhǔn)備完畢。
總結(jié)
在jboss往tomcat遷移中。這是個(gè)很常見,但確很容易導(dǎo)致重大問題的坑。
