前言: FE(Frontend)是 Apache Doris 集群架構中的“大腦”,負責元數據管理、查詢解析和調度等關鍵任務。一旦 FE 出現問題,整個集群的穩定性和可用性將受到嚴重影響。因此,掌握 FE 故障定位與排查方法對于保障 Doris 運行至關重要。本文將結合官方文檔與實際經驗,系統梳理 FE 問題排查的完整路徑。
一、FE 元數據結構與排查文檔
在排查 Doris 問題時,理解 FE 元數據的組織方式非常重要。以下是官方提供的兩篇核心文檔,建議在遇到問題時首先閱讀:
- 🔗 FE 元數據設計原理
- 🔗 元數據操作失敗的排查方法
二、排查 FE 問題需要收集哪些信息?
定位問題,第一步是“取證”。這里列出你在排查 FE 相關故障時必須要收集的文件與信息清單:
? 日志類文件
-
FE 日志目錄(
fe/log/
)下的:fe.log
:主日志,核心排查依據fe.audit.log
:用戶行為與 SQL 審計fe.gc.log
:GC 詳情,有助分析是否存在 GC pause 過長fe.out
:FE 控制臺日志,有時比fe.log
更早打印異常棧(尤其是FE core的信息都在這里記錄)
-
BDBJE 元數據日志(
fe/doris-meta/bdb/je.info.0
)- 注意:日志時間為 UTC,需+8小時換算為北京時間
-
版本信息:
- 執行
start_fe.sh --version
查看 commit ID
- 執行
-
FE 狀態:
- 執行
SHOW FRONTENDS
獲取當前所有 FE 節點狀態與角色
- 執行
-
Prometheus 監控指標(如接入 Grafana,使用Doris Manager也是可以的)
- JVM 堆內存使用率
- 線程數
- 當前導入 job 數
- checkpoint 失敗次數等
-
如果懷疑“卡住”或“死鎖”,請提供以下內容:
jstack -l <pid>
獲取線程狀態jmap -heap <pid>
查看堆內存分布jmap -histo:live <pid>
查看對象統計jmap -dump:file=xxx.hprof <pid>
獲取內存鏡像用于離線分析
-
主機級別的信息:
dmesg -T > dmesg.txt
查看操作系統層異常(看看是不是OOM)- CPU、內存、磁盤、網絡使用情況指標
三、FE 掛掉的常見原因與排查方法
1. 無法達成多數寫副本,FE 崩潰
Insufficient acks for policy:SIMPLE_MAJORITY. Need replica acks: 1. Missing replica acks: 1
-
可能原因:
- GC 暫停時間過長,導致心跳超時
- 堆內存不足,JVM 被 OOM
- Follower 節點掛掉,Master 成為孤島
- Fsync 寫磁盤耗時過長(je.info.0 會有 fsync 超時日志)
-
建議做法:
- 查看 GC 日志中是否存在"concurrent mode failure"或"promotion failed"
- 使用 jmap 分析堆中是否存在大對象或泄漏
- 檢查是否有節點宕機或物理資源(CPU/磁盤)異常
2. JVM 堆內存 OOM
-
現象:FE 異常退出,日志出現 OOM 相關堆棧信息。
-
建議做法:
- 優化導入 label 保留參數,避免內存長期被事務占用:
label_keep_max_second = 21600 streaming_label_keep_max_second = 21600
- 將 GC 策略從 CMS 改為 G1,并設置合理的 pause 時間
注意??:Doris 2.1.x之后默認使用G1JAVA_OPTS="-Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
- 優化導入 label 保留參數,避免內存長期被事務占用:
3. 操作系統 OOM Killer 殺死 FE
-
排查路徑:
- 使用
dmesg -T | grep -i java
查看 OOM 記錄 - 檢查是否其他進程搶占了系統內存
- 使用
-
建議做法:
- FE 和 BE盡量不要混合部署
- 適當增加機器內存(終極解決辦法)
四、FE 啟動失敗的常見原因
1. BDBJE 元數據損壞或磁盤空間不足
- 報錯提示:
DiskLimitException
、meta out of date
- 檢查點:
- 查看 je.info.0 是否有異常
- 檢查磁盤空間是否充足
2. 集群時鐘不同步
- 報錯:
Clock delta: xxx ms. between Feeder
- 建議所有節點啟用 ntpd 或 chronyd 同步時間
3. 啟動 jar 包不一致或 jar 包沖突
- 如高版本的 meta 使用了低版本 Doris jar 啟動
- 或 jar 包殘留版本沖突,導致反序列化失敗
4. 節點間網絡通信受限
- 防火墻導致 heartbeat、editlog 傳輸失敗
五、其他 FE 常見故障與處理建議
1. FE 卡住、死鎖、CPU 飆高
- 檢查點:
jstack
查看是否存在死鎖- Prometheus 查看 GC 時間、LoadJob 數量
- 檢查
checkpoint
是否阻塞主線程
2. checkpoint 無法完成導致 image 巨大
/doris-meta/image/
下 image 文件幾十 GB- 可能因為導入 label 未清理、ccr binlog 堆積等導致
3. SHOW FRONTENDS
執行緩慢
- 原因可能是域名解析問題/ 線程泄漏 / 內存泄漏導致 FE 狀態無法快速響應
六、常用 Java 內存分析工具
工具 | 用途 |
---|---|
jmap | 查看堆結構、對象統計、dump 內存鏡像 |
jstack | 查看線程狀態、排查死鎖 |
GCEasy | 分析 GC 日志 |
[JProfiler / Eclipse MAT] | 分析 .hprof 文件,定位內存熱點 |
Arthas | 在線火焰圖分析、方法跟蹤 |
七、Grafana FE 常用監控指標
- JVM Heap 使用率:是否頻繁達到 70% 閾值
- 線程數量:是否存在異常增長,是否持續活躍
- 導入 Job 數量:是否持續過高未清理
- checkpoint 成功率與耗時:是否頻繁失敗或超時
- editlog 寫入延遲:是否磁盤卡頓或主線程阻塞
- CPU/內存/磁盤 IO/網絡:系統資源瓶頸是否影響 FE
結語
FE 是 Apache Doris 的“心臟”,掌握其運行機制與問題排查路徑,是數據庫平臺穩定運行的基礎。建議在生產環境中部署完善的日志采集、監控系統,并對 GC 策略、內存設置等進行合理調優。如果你遇到 FE 崩潰、卡頓、無法啟動等問題,不要輕易使用 recovery 方法拉起,請先查日志、取 dump、看指標,再分析、再修復。搞不定的話,可以聯系社區同學,他們嘎嘎熱心~