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