Java 線上問題排查思路與工具使用「轉」

一、前言

Java 語言是當前互聯網應用最為廣泛的語言,作為一名 Java 程序猿,當業務相對比較穩定之後平常工作除了 coding 之外,大部分時間(70%~80%)是會用來排查突發或者週期性的線上問題。



由於業務應用 bug(本身或引入第三方庫)、環境原因、硬件問題等原因,Java 線上服務出現故障 / 問題幾乎不可避免。例如,常見的現象包括部分請求超時、用戶明顯感受到系統發生卡頓等等。

儘快線上問題從系統表象來看非常明顯,但排查深究其發生的原因還是比較困難的,因此對開發測試或者是運維的同學產生了許多的困擾。

排查定位線上問題是具有一定技巧或者說是經驗規律的,排查者如果對業務系統瞭解得越深入,那麼相對來說定位也會容易一些。

不管怎麼說,掌握 Java 服務線上問題排查思路並能夠熟練排查問題常用工具 / 命令 / 平臺是每一個 Java 程序猿進階必須掌握的實戰技能。

筆者依據自己的 工作經驗總結出一套基本的線上問題排查流程,同學們可以根據自己的實際工作情況進行歸納總結。

二、Java 服務常見線上問題

所有 Java 服務的線上問題從系統表象來看歸結起來總共有四方面:CPU、內存、磁盤、網絡。例如 CPU 使用率峰值突然飈高、內存溢出 (洩露)、磁盤滿了、網絡流量異常、FullGC 等等問題。

基於這些現象我們可以將線上問題分成兩大類: 系統異常、業務服務異常。

1. 系統異常

常見的系統異常現象包括: CPU 佔用率過高、CPU 上下文切換頻率次數較高、磁盤滿了、磁盤 I/O 過於頻繁、網絡流量異常 (連接數過多)、系統可用內存長期處於較低值 (導致 oom killer) 等等。

這些問題可以通過 top(cpu)、free(內存)、df(磁盤)、dstat(網絡流量)、pstack、vmstat、strace(底層系統調用) 等工具獲取系統異常現象數據。

此外,如果對系統以及應用進行排查後,均未發現異常現象的更笨原因,那麼也有可能是外部基礎設施如 IAAS 平臺本身引發的問題。

例如運營商網絡或者雲服務提供商偶爾可能也會發生一些故障問題,你的引用只有某個區域如廣東用戶訪問系統時發生服務不可用現象,那麼極有可能是這些原因導致的。

今天我司部署在阿里雲華東地域的業務系統中午時分突然不能為廣東地區用戶提供正常服務,對系統進行各種排查均為發現任何問題。

最後,通過查詢阿里雲公告得知原因是 “ 廣東地區電信線路訪問華東地區互聯網資源(包含阿里雲華東 1 地域)出現網絡丟包或者延遲增大的異常情況 “。


原文鏈接:https://blog.csdn.net/GitChat/article/details/79019454


分享到:


相關文章: