後臺服務出現明顯"變慢",如何排查?

一,對問題進行更加清晰定義:

  1. 首先查看服務時突然變慢還是長時間運行後觀察到變慢?類似問題是否重複出現?
  2. “慢”的定義是什麼,是系統對其他方面請求的反應延時邊長嗎?

二,清理問題的症狀,這更便於定位具體的原因,有以下思路:

  1. 問題可能來自於JAVA服務自身,也可能僅僅是受系統裏其他服務的影響。初始判斷可以先確認是否出現意外程序錯誤,例如檢查應用本身的錯誤日誌。
    對於分佈式系統,很多公司都會實現更加系統的日誌,性能等監控系統。一些JAVA診斷工具也可以用於這個診斷,例如通過JFR(Java Flight Recordea>),監控應用是否大量出現了某種類型的異常。
    如果有,那麼異常可能就是這個突破點。
    如果沒有,可以先檢查系統級別的資源等情況,監控CPU,內存等資源是否被其他進程大量佔用,並且這種佔用是不符合系統正常運行狀況。
  2. 監控JAVA服務自身,例如GC日誌裏面是否觀察到Full GC等惡劣情況出現,或者是否Minor GC 在變長等;例用jstat等工具,獲取內存使用的統計信息也是個常用手段;利用jstack等工具檢查是否出現死鎖等;
  3. 如果還不確定具體問題,對應用進行Profiling也是個辦法,但因爲它會對系統產生侵入性,如果不是非常必要,大多數情況下並不建議在生產系統上進行。
  4. 定位了程序錯誤或者JVM配置的問題後,就可以採取相應補救措施,然後驗證是否解決,否則還需要重複上面部分過程。

參考: java核心技術36講

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章