网站服务器租用协议长沙网站空间

张小明 2026/1/9 11:55:55
网站服务器租用协议,长沙网站空间,网站外包如何报价,网页搜索框设计在Doris集群运维中#xff0c;内存问题永远是最让人头疼的“拦路虎”——查询突然OOM、内存占用居高不下、GC频繁触发导致查询卡顿等#xff0c;这些问题不仅影响业务稳定性#xff0c;排查起来也常常无从下手。 作为基于MPP架构的OLAP引擎#xff0c;Doris的高性能依赖高效…在Doris集群运维中内存问题永远是最让人头疼的“拦路虎”——查询突然OOM、内存占用居高不下、GC频繁触发导致查询卡顿等这些问题不仅影响业务稳定性排查起来也常常无从下手。作为基于MPP架构的OLAP引擎Doris的高性能依赖高效的内存管理——数据在内存中流式计算、中间结果缓存、算子并行执行都离不开对内存的精准把控。今天我们从“内存结构→跟踪监控→控制策略→实战排查”四个维度把Doris内存管理扒透让你既能看懂底层逻辑又能落地解决实际问题。一、Doris BE的内存结构到底是什么样要解决内存问题首先得知道Doris的内存都用在了哪里。Doris BE的内存整体分为“被跟踪内存tracked”和“未被跟踪内存untracked”两大类每类又包含多个细分模块下面来看看整体的内存结构。1. 整体内存结构拆解服务器物理内存 ├─ Linux内核其他进程内存 └─ Doris BE进程内存 ├─ 未被跟踪内存untracked无需手动管控占比小 │ ├─ RPC通信内存 │ ├─ JVM内存访问外表、Java UDF时使用 │ └─ 部分元数据未完全统计 └─ 被跟踪内存tracked核心管控对象支持监控和回收 ├─ Jemalloc管理内存内存分配的“中间枢纽” │ ├─ Jemalloc缓存线程缓存、脏页 │ └─ Jemalloc元数据 ├─ 全局共享内存生命周期与进程一致 │ ├─ Doris缓存数据页缓存、索引缓存、文件缓存等 │ └─ 全局元数据表结构、Tablet元数据、RowSet元数据等 └─ 任务级内存任务结束后释放 ├─ 查询内存数据块、Hash表、序列化缓存等 ├─ 导入内存数据块、MemTable、刷盘缓存等 ├─ Compaction内存多版本合并时的中间数据 └─ 其他任务Schema Change、副本克隆等2. 关键内存模块说明JemallocDoris 1.2.2后默认的内存分配器替代TCMalloc高并发下性能更优负责管理线程缓存和内存块分配避免频繁向系统申请内存全局缓存可通过参数控制大小内存不足时会自动回收比如过期的Segment Cache、数据页缓存查询内存动态变化最大的部分Join/聚合/排序等算子会占用大量内存比如Hash Join构建的哈希表、Sort算子的排序缓存导入内存数据导入时先写入MemTable内存临时结构达到阈值后刷盘这部分内存可通过参数限制。二、内存跟踪器Memory TrackerDoris通过Memory Tracker实现对内存的精准跟踪不管是整体内存占用还是单个查询/导入的内存消耗都能实时查看是排查内存问题的核心工具。1. 怎么做到“内存使用全记录”统一分配入口Doris核心数据结构Arena、HashTable等都继承自Allocator所有内存申请和释放都通过Allocator统一处理自动记录到对应的Memory Tracker线程本地绑定每个查询、导入等任务初始化时会创建专属的Memory Tracker并绑定到线程本地存储Thread Local Storage / TLS任务执行过程中产生的内存都会自动关联算子级跟踪Join、Agg、Sort等算子会创建独立的Memory Tracker可精准定位哪个算子占用内存过多。2. 两种核心Tracker类型Tracker类型作用典型场景Memory Tracker Limiter内存限制监控单个查询、导入、全局缓存支持设置内存上限Memory Tracker跟踪内存热点算子级内存使用如Hash Join的哈希表用于导入数据下刷的内存控制它们的关系是“软关联”父子关系仅用于日志打印和快照展示生命周期互不影响避免复杂依赖。3. 如何查看内存跟踪数据1实时内存统计Web页面最常用访问地址http://{BE_HOST}:{BE_WEB_PORT}/mem_tracker默认端口8040核心指标解读process resident memoryBE进程物理内存取自系统/proc文件最准确sum of all trackers所有Tracker统计的内存总和通常小于物理内存存在统计缺失query/load/compaction对应任务类型的总内存占用global全局共享内存缓存元数据。查看详情在URL后加?typexxx比如?typequery查看所有查询的内存消耗?typeglobal查看全局缓存详情。2历史内存趋势Bvar页面访问地址http://{BE_HOST}:{BRPC_PORT}/vars/*memory_*默认端口8060用途查看某类内存的变化趋势定位内存泄漏或突增问题。3日志中的内存快照当报错进程内存超限或可用内存不足时BE日志be.INFO会打印Memory Tracker Summary包含所有核心Tracker的内存占用方便事后排查。4. 常见问题Tracker统计缺失怎么办现象process resident memory-sum of all trackers差值过大超过30%或Orphan Tracker值过大原因部分内存未通过Allocator分配如RPC、部分元数据或存在内存泄漏排查步骤2.1.5前版本先检查Segment Cache可能统计不准尝试关闭后测试查看doris_column_reader_num指标若数值过大则可能是Segment Cache的内存占用如果又在Heap Profile内存占比大的调用栈中看到 SegmentColumnReader字段则基本可以确认是Segment Cache占用了大量内存。用Jemalloc Heap Profile生成内存快照分析未被跟踪的内存去向。将 be.conf 中 JEMALLOC_CONF 的prof_active:false修改为prof_active:true并重启 Doris BE。执行curl http://be_host:8040/jeheap/dump后会在 ${DORIS_HOME}/log 目录看到生成的 profile 文件。执行jeprof --dot ${DORIS_HOME}/lib/doris_be ${DORIS_HOME}/log/profile_file后将终端输出的文本贴到在线dot绘图网站生成内存分配图。三、内存控制策略Doris通过“统一分配智能仲裁自动回收”三大机制确保内存使用可控核心是“在性能和稳定性之间找平衡”。1. 内存分配三大核心数据结构Allocator作为统一分配接口底层依赖三个关键数据结构管理内存优化分配效率Arena内存池维护多个Chunk内存块减少系统调用用于序列化数据、Hash表Key存储等Chunk大小动态增长最大128MHashTable用于Join、聚合、窗口函数支持并行扩容大内存场景2G扩容因子从50%提升到75%减少内存浪费PODArray动态数组存储字符串等列数据不初始化元素析构时直接释放整块内存效率更高。2. 内存复用减少浪费的“关键技巧”Doris在执行层设计了大量内存复用机制避免重复申请释放数据块Block复用查询执行时预分配一批Free Block扫描数据时循环使用任务结束后统一释放Shuffle双Block交替Sender端用两个Block交替接收和传输数据避免频繁创建BlockMemTable预聚合导入聚合表时MemTable达到阈值后预聚合收缩继续接收新数据减少内存占用。3. 内存不足时的自动GCDoris有专门的GC线程定时监控内存状态当内存超限或系统可用内存不足时触发自动回收分为两个级别1Minor GC触发条件BE内存超过SoftMemLimit默认系统内存81%或系统可用内存低于Warning水位线64G机器约6.4G执行动作暂停查询的内存分配导入强制刷盘释放MemTable内存释放部分缓存过期Segment Cache、数据页缓存若释放不足10%内存取消内存超发比例大的查询恢复查询执行。2Full GC触发条件BE内存超过MemLimit默认系统内存90%或系统可用内存低于Low水位线64G机器约3.2G执行动作暂停查询和导入导入强制刷盘并暂停释放全部数据页缓存和大部分全局缓存取消内存占用大的查询和导入直到释放20%内存恢复任务执行。4. 核心内存参数参数默认值作用mem_limit90%BE进程内存上限占系统物理内存比例soft_mem_limit_frac0.9SoftMemLimit mem_limit * 此值默认81%max_sys_mem_available_low_water_mark_bytes-1低水位线默认自动计算64G机器约3.2Gwrite_buffer_size100M单个MemTable的内存上限导入刷盘阈值load_process_max_memory_limit_percent50%导入内存占BE总内存的比例上限五、Doris内存管理的核心逻辑Doris的内存管理本质是“精细化管控智能化回收”通过Memory Tracker实现全链路监控用Allocator统一分配内存靠GC机制在内存不足时自动自救既保证查询性能内存复用、缓存加速又避免OOM风险。对运维来说关键是抓住三个核心会用工具MemTracker实时监控、Bvar历史趋势、日志快照事后排查懂参数mem_limit进程上限、exec_mem_limit导入的内存限制、write_buffer_size刷写前缓冲区的大小明场景不同任务查询/导入/Compaction的内存特点不同针对性优化。如果你的集群正面临内存问题不妨按照上面的步骤一步步排查大部分问题都能定位到根源。如果需要更精准的分析也可以分享你的MemTracker截图和日志一起探讨解决方案
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

企业做个网站多少钱seo网站有优化培训班吗

WorkshopDL:轻松解锁Steam创意工坊模组下载的完整解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊而烦恼吗?Worksh…

张小明 2026/1/7 20:19:52 网站建设

眉县网站开发网站开发从事

Kotaemon 与 OpenTelemetry 的深度集成:构建可观察的 RAG 智能体 在当今 AI 应用快速演进的背景下,构建一个“能用”的智能对话系统已不再是终极目标——真正的挑战在于,如何让这个系统在生产环境中始终可靠、性能可控、问题可追溯。尤其是在…

张小明 2026/1/7 14:36:53 网站建设

连云港市建设银行网站清镇网站建设推广

Langchain-Chatchat 连续性测试知识查询平台 在软件测试日益复杂、迭代节奏不断加快的今天,一个常见的痛点浮现出来:测试人员面对海量的技术文档、历史记录和分散的知识源,往往需要花费大量时间去“翻找”某个特定问题的答案。比如&#xff0…

张小明 2026/1/7 20:19:52 网站建设

优秀包装设计网站产品设计平台有哪些

PyTorch镜像中实现模型鲁棒性测试:对抗样本攻击防御 在自动驾驶系统误将停车标志识别为限速40、医疗AI因微小噪声错判肿瘤恶性程度的今天,深度学习模型的安全边界正面临前所未有的挑战。这些看似荒诞的结果背后,往往源于一个共同的技术漏洞—…

张小明 2026/1/7 20:19:53 网站建设

做网站销售说辞桂建云官网

从GitHub克隆项目后如何在TensorFlow 2.9镜像中正确运行 你有没有遇到过这种情况:兴冲冲地从 GitHub 克隆了一个看起来非常棒的深度学习项目,满怀期待地运行 python train.py,结果却弹出一连串报错——模块找不到、版本不兼容、CUDA 驱动冲突…

张小明 2026/1/7 5:01:32 网站建设

做网站引流的利润公司做公司网站广告

DVA框架与现代React Hooks的深度整合实践 【免费下载链接】dva dvajs/dva: DVA 是一个基于 Redux 和 React 的轻量级前端框架,用于构建复杂的状态管理方案。它引入了模型(model)的概念,简化了Redux的应用状态管理和异步逻辑处理,使得React应用…

张小明 2026/1/7 4:38:00 网站建设