首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 線上服務故障排查實戰指南:日誌、數據庫、JVM 與系統層面全維度分析

     編輯:Java 綜合教學

Java 線上服務故障排查實戰指南

生產環境故障處理是後端工程師的核心技能。本文構建系統化排查框架,從業務日誌、數據庫瓶頸、JVM 異常到作業系統資源,提供標準化工具鏈與實戰案例,幫助工程師快速定位根因、精準止血。

一、業務日誌分析體系

異常發生時,業務日誌是第一現場。

核心工具鏈

  • less / more:分頁查看大文件,避免全量加載
  • grep:關鍵字精準過濾 grep "ERROR" app.log | grep "OrderService"
  • tail -f:實時跟蹤 tail -f /var/log/app/error.log

禁忌: 絕不使用 vim 直接打開超大日誌文件(會佔滿內存導致 OOM)。

二、數據庫性能瓶頸排查

Java 應用 80% 以上性能問題源於數據庫。

典型癥狀

  • 拋出 Could not get JDBC Connection
  • 接口響應時間暴增
  • 線程池打滿、拒絕策略觸發

排查步驟

  1. 登錄數據庫執行 show processlist 查看連接狀態
  2. 識別長時間運行的 Query 或 Sleep 狀態進程
  3. 確認為慢查詢導致後,手動 kill 釋放連接
  4. 配合 EXPLAIN 分析執行計劃,優化索引或 SQL

三、JVM 核心故障診斷

JVM 問題主要集中在:GC 耗時過長、OOM、死鎖、線程阻塞、線程數暴增。

標準工具箱

工具核心用途
jps -v列出 JVM 進程及啟動參數
jinfo <pid>查看運行時配置、系統屬性
jstat -gcutil <pid> 1000 10GC 統計:各代區佔用、GC 次數/耗時
jstack -l <pid>線程堆棧快照,死鎖/阻塞分析
jmap -dump:format=b,file=heap.hprof <pid>堆轉儲文件生成

3.1 OOM 內存溢出

  • 現象:服務 Crash,日誌出現 OutOfMemoryError
  • 根因:內存洩漏(佔多數)或堆配置過小
  • 預防:啟動參數添加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps
  • 分析:使用 MAT (Memory Analyzer Tool) 打開 hprof,定位支配者鏈路、GC Roots 引用路徑
  • 手動觸發:jmap -dump:format=b,file=manual.hprof <pid> 或 kill -3 <pid>

運維提示: 確保磁盤剩餘空間 > JVM 最大堆內存(-Xmx)。

3.2 死鎖診斷

  • 現象:線程 Hang 住,嚴重時線程數暴增、健康檢查失敗
  • 核心手段:jstack -l <pid> 分析線程堆棧
  • 關鍵特徵:BLOCKED 狀態、waiting for monitor entry、waiting on condition

3.3 線程阻塞與數量暴增

# 統計總線程數
jstack -l <pid> | wc -l

# 統計 BLOCKED 狀態
jstack -l <pid> | grep "BLOCKED" | wc -l

# 統計等待條件
jstack -l <pid> | grep "Waiting on condition" | wc -l

阻塞類型判斷:

  • 大量 "waiting for monitor entry": 全局鎖爭用,臨界區執行過長導致排隊
  • 大量 "waiting on condition" + 網絡讀寫堆棧: 下游服務響應慢/超時,線程池被佔滿

3.4 GC 耗時過長

重點關注:Full GC 頻率、單次耗時、老年代佔用率。推薦閱讀 Oracle G1GC 調優指南。

四、作業系統資源瓶頸

4.1 CPU 分析

top  # 交互模式下常用快捷鍵:
# h 幫助  R 反向排序  x 高亮排序列  y 高亮運行進程
# Shift+>/< 切換排序字段  d/s 設置刷新間隔  f 字段管理  k kill 進程

關鍵指標:

  • load average:1/5/15 分鐘負載,超過 CPU 核心數表示擁塞
  • %us(用戶態)、%sy(內核態)、%wa(IO 等待)、%st(虛擬機偷佔時間)

4.2 內存分析

# 連續觀察
free -m -c 10 -s 1  # 每秒刷新,共 10 次,MB 單位

# vmstat 系統級視角
vmstat 1 10  # 每秒輸出,共 10 次
# 關鍵列:r(運行隊列長度,持續 >1 需擴容 CPU)、b(IO 等待進程數)

4.3 磁盤 IO 分析

iostat -m 1 10  # MB 單位,每秒刷新 10 次
# 關注:%util(設備利用率)、await(平均等待時間)、svctm(服務時間)

五、故障處理標準化流程 (SOP)

  1. 止血:重啟服務、切換流量、熔斷降級、Kill 慢查詢
  2. 定性:業務影響範圍、錯誤率、延遲分位數
  3. 定位:按本文工具鏈由上至下(應用→中間件→JVM→OS)
  4. 根因:代碼缺陷、配置錯誤、資源不足、依賴故障
  5. 修復:熱修復/發布修正、參數調優、架構優化
  6. 複盤:事後報告、監控補盲、預案演練

六、生產環境監控建議

  • JVM 級:GC 頻率/耗時、堆/非堆佔用、線程數、類加載數
  • 業務級:QPS、錯誤率、P99 延遲、下游依賴健康度
  • 資源級:CPU/內存/磁盤/網絡飽和度
  • 日誌級:ERROR/WARN 趨勢、關鍵業務 TraceId 鏈路
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved