Java服務(wù)異常排查定位大圖
引言
研發(fā)工程師日常的工作除了開發(fā)實(shí)現(xiàn)新需求之外,排查定位問題也是重要的組成部分。如果在發(fā)生線上故障的時(shí)能夠快速定位線上bug并且修復(fù)bug,不僅是研發(fā)工程師技術(shù)能力的重要體現(xiàn),同時(shí)也可以幫助線上及時(shí)止血避免平臺(tái)故障進(jìn)一步蔓延,從而導(dǎo)致影響用戶體驗(yàn)或者產(chǎn)生不可挽回的資損。但是實(shí)際上很多研發(fā)工程師由于工作經(jīng)驗(yàn)還不充足,導(dǎo)致經(jīng)常在遇到問題的時(shí)候不知所措,不知道該如何分析排查定位問題。因此本文主要聚焦日常工作中經(jīng)常遇到的異常場(chǎng)景,梳理了問題排查定位的思路大圖,這樣大家在實(shí)際項(xiàng)目中如果遇到類似的異常場(chǎng)景,可以按照思路大圖進(jìn)行問題排查定位解決,相信大家掌握了故障定位的分析套路之后就可以做到遇到問題時(shí)臨危不亂。
Java服務(wù)異常
系統(tǒng)資源問題定位
系統(tǒng)資源問題定位的核心是找到到底是哪個(gè)進(jìn)程在異常占用系統(tǒng)資源,特別是在服務(wù)器中混部了多種服務(wù)的時(shí)候,經(jīng)常會(huì)遇到系統(tǒng)資源競(jìng)用的情況。因此需要確定異常進(jìn)程的pid,然后再繼續(xù)分析異常服務(wù)中到到底是哪個(gè)工作線程出現(xiàn)異常,如果并不是代碼問題導(dǎo)致的,那么則需要考慮增加硬件配置來承載混部的各個(gè)服務(wù)。
JVM內(nèi)存溢出問題定位
JVM內(nèi)存溢出的問題應(yīng)該是每個(gè)研發(fā)工程師都會(huì)遇到的問題,主要大概就是JVM參數(shù)設(shè)置不合理、代碼Bug等幾方面的原因。其中代碼Bug為主要原因,因此在我們實(shí)際寫代碼的過程中就需要考量內(nèi)存占用的問題,特別是對(duì)于一些遞歸操作、服務(wù)內(nèi)一次緩存大量數(shù)據(jù)、在for循環(huán)中查詢數(shù)據(jù)等都要特別注意或者避免。
接口響應(yīng)慢問題定位
服務(wù)接口響應(yīng)慢的問題大概是這三種異常場(chǎng)景中最復(fù)雜的,主要可以從兩個(gè)層面進(jìn)行分析,一個(gè)是服務(wù)自身存在問題導(dǎo)致接口響應(yīng)慢,另一個(gè)是服務(wù)的依賴方出現(xiàn)響應(yīng)慢導(dǎo)致。因此分析排查定位過程也是主要從這兩方面出發(fā),服務(wù)自身問題主要包括代碼Bug、系統(tǒng)資源異常使用等,依賴方主要包括依賴的中間件、下游服務(wù)接口等。
總結(jié)
本文主要梳理了日常研發(fā)工作中最常見的三種異常場(chǎng)景,分別是服務(wù)器資源使用異常、Java服務(wù)內(nèi)存溢出異常以及接口響應(yīng)超時(shí)異常。同時(shí)結(jié)合實(shí)際的經(jīng)驗(yàn)提煉了各個(gè)異常情況下的問題根因分析思路以及排查定位大圖,大家在遇到類似問題的時(shí)候可以參考大圖中的思路進(jìn)行問題排查定位以及解決。