用途:排查 Apache Doris 集群中 FE/BE 节点的 OOM、崩溃或假存活(False Alive)问题,帮助定位节点健康异常的根本原因。
主要能力:将常见故障归纳为五类原因并给出证据来源——A:BE OOM/被系统杀死(dmesg 显示 Killed,be.WARNING 出现 MemTrackerLimiter);B:FE JVM OOM(GC 开销过高或堆转储,fe.out 出现 OutOfMemoryError);C:BE 崩溃(SIGSEGV/SIGABRT,core dump 与 be.out 堆栈);D:假存活(SHOW BACKENDS 显示 Alive=true 但查询因 brpc 失败);E:文件描述符耗尽(be.WARNING 提示 Too many open files)。
使用方式:提供 10 分钟分诊命令,例如用 ./scripts/doris-debug log-grep be/log --pack memory 抓取内存压力信号,用 dmesg -T | grep -i "killed process" 查看被杀进程;FE 侧用 jstack 与 jmap -heap 分析 JVM;用 ls /proc/$(cat /path/to/be.pid)/fd | wc -l 统计 FD 数量,并查看 limits 中的 open files。
关键要点:Doris 通过 MemTracker 跟踪内存,但进程 RSS 可能因 jemalloc arena 碎片(10-20% 开销)、brpc 缓冲池(不计入 MemTracker)和线程栈(约 8MB×线程数)而超出跟踪值。be.conf 可设置 mem_limit = 70%、max_segment_cache_size = 0、enable_je_purge = true 等防御性参数。若 ProcessMemoryReachedCancel 未触发但 OOM killer 已介入,说明 mem_limit 与系统内存之间的余量不足以覆盖 jemalloc 与 brpc 开销。FE 堆随 catalog 元数据增长,可提高 -Xmx 或降低 hive_meta_cache_ttl_sec 与 catalog 刷新频率。
限制:Alive=true 仅表示心跳 RPC 成功,不代表 brpc 端口(8060)健康;若 Alive=true 但查询报 E1008,应转向 doris-debug-query 排查 Exchange/brpc,检查 priority_networks、enable_brpc_connection_check、reset_rpc_channel,不能仅凭 SHOW BACKENDS 的 Alive 判断节点可用。