【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.mzph.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就是配置文件…

【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…

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大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…

东哥一句兄弟,你还当真了?

关注卢松松,会经常给你分享一些我的经验和观点。 你还真把自己当刘强东兄弟了?谁跟你是兄弟了?你在国外的房子又不给我住,你出去旅游也不带上我!都成人年了,东哥一句客套话,别当真! 今天,东哥在高管会上直言&…

[数据结构] -- 单链表

🌈 个人主页:白子寰 🔥 分类专栏: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研究测试&…

02-Linux【基础篇】

一、Linux的目录结构 1.基本介绍 Linux的文件系统采用层级式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录 深刻理解Linux树状文件目录是非常重要的 记住一句经典的话:在Linux世界里&#xff…

如何在 DigitalOcean Droplet 云主机上创建 Ubuntu 服务器

在本文中,你将通过 DigitalOcean 的管理面板创建一个 Ubuntu 服务器,并将其配置为使用你的 SSH 密钥。设置好服务器后,你可以在其上部署应用程序和网站。 本教程是DigitalOcean云课程简介的一部分,它指导用户完成将应用程序安全地…

win10右键没有默认打开方式的选项的处理方法

问题描述 搞了几个PDF书籍学习一下,不过我不想用默认的WPS打开,因为WPS太恶心人了,占用资源又高。我下载了个Sumatra PDF,这时候我像更改pdf文件默认的打开程序,发现右击没有这个选项。 问题解决 右击文件–属性–…

汽车以太网发展现状及挑战

一、汽车以太网技术联盟 目前推动汽车以太网技术应用与发展的组织包括:OPEN Alliance(One-Pair Ether-Net Alliance SIG)联盟,主要致力于汽车以太网推广与使用,该联盟通过推进 BroadR- Reach 单对非屏蔽双绞线以太网传…

设计新境界:大数据赋能UI的创新美学

设计新境界:大数据赋能UI的创新美学 引言 随着大数据技术的蓬勃发展,它已成为推动UI设计创新的重要力量。大数据不仅为界面设计提供了丰富的数据资源,还赋予了设计师以全新的视角和工具来探索美学的新境界。本文将探讨大数据如何赋能UI设计…