【Apache Doris】BE宕機問題排查指南

【Apache Doris】BE宕機問題排查指南

  • 背景
  • BE宕機分類
    • 如何判斷是BE進程是Crash還是OOM
    • BE Crash 后如何排查
    • BE OOM 后如何分析
    • Cache 沒及時釋放導致BE OOM(2.0.3-rc04)
  • 關于社區

作者|李淵淵

背景

在實際線上生產環境中,大家可能遇到過BE 宕機的問題,Apache Doris 的BE部分是由C++編寫,當出現一些內存越界,非法訪問的問題時會導致BE進程的Crash,同時也比較難排查,我們通過幾個例子來帶大家一起分析下。同時一般為了減小此類問題對線上業務造成影響,大家都會通過一些特殊方案來避免,比如:

  1. 容災備份、讀寫分離、建設兩地三中心等: 跨集群數據同步
  2. 手動配置 Service 自動拉起:服務自動拉起 - Apache Doris。服務自動拉起
  3. Manager 接管集群進行服務自動拉起:Doris Manager

BE宕機分類

目前一般遇到的有這么幾種情況:

  1. BE 進程非正常退出
    a. 有 bug 導致BE進程Crash
    b. BE 進程OOM
  2. BE 進程正常退出
    這里我們主要看非正常退出這塊。因為其實有部分情況是這樣的,有些同學和運維同學內部沒有對齊,可能服務器reboot了或者什么情況,所以一般出現問題后,可以先和相關的同學對齊下,看看是否有其他操作。

如何判斷是BE進程是Crash還是OOM

  1. 首先可以看be/log/be.out中是否有堆棧信息,如果有堆棧信息輸出就是crash了,如下:
    1280X1280.PNG
  2. 如果沒有堆棧信息,只有一些啟動信息的話,可以通過執行dmesg -T 看看是否是OOM,如果是OOM會有Killed的日志
    1280X1280 (1).PNG

BE Crash 后如何排查

  1. 首先BE core了之后先不要著急,可以先嘗試將服務拉起來(建議配置自動拉起),后續繼續排查。首先觀察堆棧信息,堆棧中有一個 Query id ,這個一般是導致BE core的query
  2. 通過 query_id 定位下是哪條sql導致的,需要去fe下fe.audit.log中grep下,注意要去所有FE 節點進行搜索,因為如果是做了負載均衡的話可能是發送到其中一個fe節點執行的,因為查詢這種不涉及元數據操作的sql是不會轉發到master的。比如:grep “58a4a56ad38f4f57-b958cc1374948c85” fe/log/fe.audit.log
  3. 定位出是哪條sql導致的,可以先把這條sql禁止掉,同時方便的話可以整理下涉及到的表的schema信息等,把be.out + 整理的信息提供給社區同學,方便復現和定位問題。
  4. 等待社區同學進行分析和判斷,同時可以判斷下這個問題的影響面。
    a. 如果這個問題比較嚴重,且是未知問題,可以先等社區分析和修復,著急的話可以聯系社區同學提供patch包(patch包沒有經過回歸測試,所以需要評估)。
    b. 如果是已知問題,并且在新版本已經修復,那么可以考慮通過升級解決這個問題。

特殊情況:
有時候問題比較難復現,排查問題的周期也會比較長,如果問題比較嚴重,那么對用戶業務的影響面還是比較大的,所以有時需要用戶環境生成的 core 文件來配合進行debug,來盡快的定位和fix問題。下邊介紹下如何取core文件。

1.查看生成CoreDump文件的開關是否開啟,輸入命令 ulimit -a

在這里插入圖片描述

2.第一行 core file size 為0,則不會生成CoreDump。使用 ulimit -c [kbytes] 命令可以設置系統允許生成的CoreDump的文件大小。所以在BE啟動時,加入以下命令 即可ulimit -c unlimited -n 65536 && sh start_be.sh --daemon啟動后可以通過 cat /proc/{be pid}/limits 確認是否成功開啟coredump,core file size是 unlimited 則表示已經成功打開。

384006e9-4373-48f5-a573-2a83625e9550.png
3.此時,就會在BE Crash的時候,生成CoreDump文件,默認的位置是在BE目錄下,如果BE目錄下沒有core文件嗎,執行以下命令,這里顯示CoreDump文件被core_pattern定義設置在了/tmp目錄下,所以需要到對應的目錄查找BE生成的CoreDump文件。
cat /proc/sys/kernel/core_pattern/tmp/core_%t_%e_%p

在這里插入圖片描述

  1. 方便的話可以把core文件進行壓縮上傳到對象存儲上,然后提供給社區同學進行問題的定位和fix

BE OOM 后如何分析

一般大家在使用的過程中會遇到內存泄漏不釋放,或者是因為一些大query和load任務導致OOM的情況,下文帶大家一起實操一把,如何進行分析。首先可以參考官網OOM的分析以及memtracker如何看:

BE OOM分析 - Apache Doris
內存跟蹤器 - Apache Doris

Cache 沒及時釋放導致BE OOM(2.0.3-rc04)

  1. BE 出現宕機,且已經通過dmesg -T 確定是OOM
    e5912a45-9d2e-4de5-a4ca-81702a9f837a.png

  2. 這時候如果有部署監控,可以通過監控看下具體內存的使用情況
    fbafcc49-5fcb-4367-8e3e-8dea7ab58a74.png

  3. 通過BE重啟的時間節點,找到最后一次打印的memtracker的統計信息進行分析
    6987d57f-c1ae-4461-8662-002a97f602e6.png

  4. 從這個日志中可以詳細的看到各個模塊在內存的使用情況

BE 進程總共使用了209.01 GB
內存中 導入69G,其中 LoadChannelMgr 33G
page cache 46G
jemalloc cache 15G
brpc IOBufBlockMemory 5G
SegCompaction 13G
orphan 77G 
其中應該大部分是 segment cache、tablet schema 等元數據內存

分析: minor gc 只會淘汰過期的cache,full gc才會淘汰所有cache,因為 GC 線程卡住,一直沒到full gc,所以page cache等一直沒釋放,最終導致OOM。

臨時規避方式

  1. 調低 jemalloc purge dirty page 時間,be.conf 中修改 JEMALLOC_CONF,把 dirty_decay_ms:15000 改成 dirty_decay_ms:3000, 預期對性能的影響很小。
  2. be.conf 中增加 soft_mem_limit_frac=1,mem_limit=75%,確保只會觸發full gc補充,目前2.0最新的tag,已經將 jemalloc purge dirty page改成異步的了,不會再阻塞gc過程

大查詢導致BE OOM:

  1. 通過BE重啟的時間節點,找到最后一次打印的memtracker的統計信息進行分析
    f1ce0e7f-0e5c-4ee2-bcf9-61042581e39b.png

  2. 從這里memtracker統計信息中能看到query占了156.74 GB
    沒cancel完成的query分析
    OOM時間點:11:26:04.00
    a. 557061ef69164835-91b49a23b5ad2e86,11:25:50.78提交,11:26:00系統內存不足被cancel,
    cf7ad302-704f-4053-9d3d-a920755b3f02.png

    b. 44fe8d21b1bc464e-8b76ebd5616b5a2e, 11:25:50.58提交,11:26:01.53系統內存不足被cancel
    6cc1c410-9154-4151-8eea-550ae5f49c49.png

    c. 21fbdf757857472f-acc7b3019a9cf5c7,11:25:50.62 提交,11:26:02.12系統內存不足被cancel
    5461c9b9-4898-424c-a98f-d4975f826dd9.png

MemTrackerLimiter Label=Query#Id=557061ef69164835-91b49a23b5ad2e86, Type=query, Limit=2.00 GB(2147483648 B), Used=19.71 GB(21161637576 B), Peak=19.71 GB(21161637576 B)MemTrackerLimiter Label=Query#Id=44fe8d21b1bc464e-8b76ebd5616b5a2e, Type=query, Limit=2.00 GB(2147483648 B), Used=19.48 GB(20918726034 B), Peak=19.48 GB(20918726034 B)MemTrackerLimiter Label=Query#Id=cdab77b22af4838-bf091a81792ce980, Type=query, Limit=2.00 GB(2147483648 B), Used=19.03 GB(20434770852 B), Peak=19.03 GB(20434770852 B)MemTrackerLimiter Label=Query#Id=970a709426054d7c-adb669c4a0149008, Type=query, Limit=2.00 GB(2147483648 B), Used=18.06 GB(19391774018 B), Peak=18.06 GB(19391774018 B)MemTrackerLimiter Label=Query#Id=21fbdf757857472f-acc7b3019a9cf5c7, Type=query, Limit=2.00 GB(2147483648 B), Used=17.97 GB(19289808376 B), Peak=17.97 GB(19289808376 B)MemTrackerLimiter Label=Query#Id=7b588343d6b44405-a6133ba172430450, Type=query, Limit=2.00 GB(2147483648 B), Used=17.63 GB(18927825655 B), Peak=17.63 GB(18927825655 B)MemTrackerLimiter Label=Query#Id=b3d4d075f39f48bd-89ab45378d20a028, Type=query, Limit=2.00 GB(2147483648 B), Used=17.07 GB(18332161696 B), Peak=17.07 GB(18332161696 B)

結論:query cancel不及時導致OOM,情況比較極端:
a. 11:25:50 同一時間提交了10個左右大查詢,每個內存都在10G+
b. 11:26:00 - 11:26:02 GC發現系統內存不足陸續cancel了這10個query,此時系統可用內存只剩3G
c. 11:26:04 BE進程OOM,query沒有cancel完成

目前2.1 版本上目前修復了一些 query cancel 慢的問題

規避方式

be.conf 中增加 
max_sys_mem_available_low_water_mark_bytes=6871947672   (默認1.6G,改成6.4G或3.2G)

關于社區

在這里插入圖片描述

Apache Doris 是一個基于 MPP 架構的高性能、實時的分析型數據庫,以極速易用的特點被人們所熟知,僅需亞秒級響應時間即可返回海量數據下的查詢結果,不僅可以支持高并發的點查詢場景,也能支持高吞吐的復雜分析場景。
如果您對 Apache Doris 感興趣,可以通過以下入口訪問官方網站、社區論壇、GitHub和dev郵件組:

💡官方文檔

💡社區論壇

💡GitHub

💡dev郵件組:dev@doris.apache.org

非常歡迎您在社區論壇中與其他用戶分享您的使用經驗和技巧,或者向dev郵件組提交反饋和意見。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15711.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

校園網撥號上網環境下多開虛擬機,實現宿主機與虛擬機互通,并訪問外部網絡

校園網某些登錄客戶端只允許同一時間一臺設備登錄,因此必須使用NAT模式共享宿主機的真實IP,相當于訪問外網時只使用宿主機IP,此方式通過虛擬網卡與物理網卡之間的數據轉發實現訪問外網及互通 經驗證,將centos的物理地址與主機物理…

有什么好用的語音翻譯軟件推薦?親測實用的語音翻譯工具來了

嘿,大家好!你們有沒有想過,現在世界這么“小”,我們跟不同國家的人打交道的機會越來越多了。 但是呢,語言不通真是個大問題。別擔心,現在有個超棒的解決方案——語音翻譯技術!這玩意兒能實時把…

Spring Cloud學習筆記(Nacos):配置中心基礎和代碼樣例

這是本人學習的總結,主要學習資料如下 - 馬士兵教育 1、Overview2、樣例2.1、Dependency2.2、配置文件的定位2.3、bootstrap.yml2.4、配置中心新增配置2.5、驗證 1、Overview 配置中心用于管理配置項和配置文件,比如平時寫的application.yml就是配置文件…

Python 遍歷字典的方法,你都掌握了嗎

Python中的字典是一種非常靈活的數據結構,它允許通過鍵來存儲和訪問值。在處理字典時,經常需要遍歷字典中的元素,以下是幾種常見的遍歷字典的方法。 1. 使用 for 循環直接遍歷字典的鍵 字典的鍵是唯一的,可以直接通過 for 循環來…

【Spring Security + OAuth2】OAuth2

Spring Security OAuth2 第一章 Spring Security 快速入門 第二章 Spring Security 自定義配置 第三章 Spring Security 前后端分離配置 第四章 Spring Security 身份認證 第五章 Spring Security 授權 第六章 OAuth2 文章目錄 Spring Security OAuth21、OAuth2簡介1.1、OAu…

call、apply和bind

call、apply和bind都是JavaScript中函數對象的方法,用于改變函數的this值。 call:call方法接收一個對象和一系列參數,并立即調用函數,將this值設置為提供的對象。例如: function greet(greeting, punctuation) {cons…

Linux驅動開發筆記(二) 基于字符設備驅動的I/O操作

文章目錄 前言一、設備驅動的作用與本質1. 驅動的作用2. 有無操作系統的區別 二、內存管理單元MMU三、相關函數1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知識1. GPIO的寄存器進行讀寫操作流程2. 引腳復用2. 定義GPIO寄存器物理地址 五、…

【2024最新華為OD-C卷試題匯總】傳遞悄悄話的最長時間(100分) - 三語言AC題解(Python/Java/Cpp)

🍭 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C卷的三語言AC題解 💻 ACM銀牌🥈| 多次AK大廠筆試 | 編程一對一輔導 👏 感謝大家的訂閱? 和 喜歡💗 文章目錄 前…

東哥一句兄弟,你還當真了?

關注盧松松,會經常給你分享一些我的經驗和觀點。 你還真把自己當劉強東兄弟了?誰跟你是兄弟了?你在國外的房子又不給我住,你出去旅游也不帶上我!都成人年了,東哥一句客套話,別當真! 今天,東哥在高管會上直言&…

mysql內存結構

一:邏輯存儲結構:表空間->段->區->頁->行、 表空間:一個mysql實例對應多個表空間,用于存儲記錄,索引等數據。 段:分為數據段,索引段,回滾段。innoDB是索引組織表&…

215. 數組中的第K個最大元素(快速排序、堆排序)

根據這道題總結一下快速排序和堆排序,再根據這兩種方法寫這道題。 給定整數數組 nums 和整數 k,請返回數組中第 k 個最大的元素。 請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。 你必須設計并實…

qmt量化交易策略小白學習筆記第6期【qmt如何獲取股票歷史漲跌停價格】

qmt如何獲取股票歷史漲跌停價格 qmt更加詳細的教程方法,會持續慢慢梳理。 也可找尋博主的歷史文章,搜索關鍵詞查看解決方案 ! 感謝關注,需免費開通量化回測與咨詢實盤權限,可以和博主聯系! 獲取股票歷史…

[數據結構] -- 單鏈表

🌈 個人主頁:白子寰 🔥 分類專欄:C打怪之路,python從入門到精通,數據結構,C語言,C語言題集👈 希望得到您的訂閱和支持~ 💡 堅持創作博文(平均質量分82)&#…

c++編程14——STL(3)list

歡迎來到博主的專欄:c編程 博主ID:代碼小豪 文章目錄 list成員類型構造、析構、與賦值iterator元素訪問修改元素list的操作 list list的數據結構是一個鏈表,準確的說應該是一個雙向鏈表。這是一個雙向鏈表的節點結構: list的使用…

Vue學習筆記3——事件處理

事件處理 1、事件處理器(1)內聯事件處理器(2)方法事件處理器 2、事件參數3、事件修飾符 1、事件處理器 我們可以使用v-on 指令(簡寫為)來監聽DOM事件,并在事件觸發時執行對應的JavaScript。 用法: v-on:click"me…

JVM學習-執行引擎

執行引擎 執行引擎是Java虛擬機核心組成部分之一虛擬機是一個相對于物理機的概念,這兩種機器都有代碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、緩存、指令集和操作系統層面上的,而虛擬機的執行引擎是由軟件自行實現的&#xf…

【算法】遞歸、搜索與回溯——簡介

簡介:遞歸、搜索與回溯,本節博客主要是簡單記錄一下關于“遞歸、搜索與回溯”的相關簡單概念,為后續算法做鋪墊。 目錄 1.遞歸1.1遞歸概念2.2遞歸意義2.3學習遞歸2.4寫遞歸代碼步驟 2.搜索3.回溯與剪枝 遞歸、搜索、回溯的關系: …

ICML2024 定義新隱私保護升級:DP-BITFIT新型微調技術讓AI模型學習更安全

DeepVisionary 每日深度學習前沿科技推送&頂會論文分享,與你一起了解前沿深度學習信息! 引言:差分隱私在大模型微調中的重要性和挑戰 在當今的深度學習領域,大型預訓練模型的微調已成為提高各種任務性能的關鍵技術。然而&am…

推特熱帖:大語言模型自薦能夠替代的20種人類工作!快來看你是否需要轉行!

最近推特上有一個例子引起了廣泛的討論,事情的起因是這樣的:網友讓 GPT-4o 預測一下自己未來將會替代人類哪些工作? 這聽起來很有趣!GPT-4o會給出什么樣的預測呢? 3.5研究測試:hujiaoai.cn 4研究測試&…