doris-debug-node
Use for Doris FE/BE OOM, crash, or false Alive. BE: MemTrackerLimiter lines in be.WARNING; FE: JVM heap / jstack. Distinguish heartbeat Alive from query/brpc serving health.
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-04
- Stars
- ★ 50
- Forks
- 15
01 前言 Front Matter
- name
- doris-debug-node
- version
- 0.2.0
- category
- node
- description
- Use for Doris FE/BE OOM, crash, or false Alive. BE: MemTrackerLimiter lines in be.WARNING; FE: JVM heap / jstack. Distinguish heartbeat Alive from query/brpc serving health.
02 资源文件 9
- 参考文档agents/openai.yaml303 B
- 资产文件assets/github-small.svg853 B
- 资产文件assets/github.png1.8 KB
- 许可证LICENSE.txt11.1 KB
- 参考文档references/case-001-be-oom-memtracker.md1.2 KB
- 参考文档references/case-002-filecache-lru-leak.md3.2 KB
- 参考文档references/case-003-be-scanner-pileup-memory.md4.9 KB
- 参考文档references/case-004-fe-bdbje-corruption.md3.5 KB
- 脚本scripts/fetch_comments.py6.4 KB
03 SKILL.md 正文
Node Health
Causes
| ID | Cause | Evidence | Source anchor |
|---|---|---|---|
| A | BE OOM / killed | dmesg shows Killed; be.WARNING MemTrackerLimiter |
mem_tracker_limiter.cpp |
| B | FE JVM OOM | GC overhead / heap dump; fe.out shows OutOfMemoryError |
fe.conf JVM opts |
| C | BE crash (SIGSEGV/SIGABRT) | Core dump; be.out stacktrace |
doris_main.cpp signal handler |
| D | False Alive | SHOW BACKENDS Alive=true but queries fail brpc |
heartbeat vs brpc health |
| E | FD exhaustion | Too many open files in be.WARNING |
ulimit -n |
10 min triage
# Memory pressure signals
./scripts/doris-debug log-grep be/log --pack memory
dmesg -T | grep -i "killed process" | tail -5
# FE JVM
jstack $(cat /path/to/fe.pid) > /tmp/fe.jstack
jmap -heap $(cat /path/to/fe.pid) 2>/dev/null | head -30
# FD count
ls /proc/$(cat /path/to/be.pid)/fd | wc -l
cat /proc/$(cat /path/to/be.pid)/limits | grep "open files"
# Resource snapshot
top -b -n 1 -p $(cat /path/to/be.pid) | head -5
free -h
Cause A — BE OOM
Doris tracks memory via MemTracker, but process RSS exceeds tracked memory due to:
- jemalloc arena fragmentation (10-20% overhead)
- brpc buffer pools (outside MemTracker)
- Thread stacks (~8MB each × thread count)
# RSS vs tracked
ps -o rss= -p $BE_PID | awk '{printf "RSS: %.1f GB\n", $1/1024/1024}'
grep "MemTrackerLimiter.*total" be/log/be.WARNING | tail -1
# be.conf — defensive settings
mem_limit = 70% # Leave 30% for overhead
max_segment_cache_size = 0 # Or cap explicitly
enable_je_purge = true # jemalloc dirty page cleanup
If ProcessMemoryReachedCancel didn't fire but OOM killer did: the gap between mem_limit and system RAM wasn't enough for jemalloc + brpc overhead.
Cause B — FE JVM
# FE JVM opts (from fe.conf or start script)
ps aux | grep "PaloFe" | grep -o "\-Xmx[^ ]*"
Common: FE heap grows with catalog metadata (many tables/partitions). Raise -Xmx or reduce hive_meta_cache_ttl_sec / catalog refresh frequency.
Cause D — False Alive
Alive=true means the heartbeat RPC succeeds. This does NOT mean the brpc port (8060) is healthy for data transfer. If queries fail with E1008 while Alive=true:
→ Route to doris-debug-query (Cause D — Exchange / brpc)
→ Check priority_networks, enable_brpc_connection_check, reset_rpc_channel
→ Do not trust SHOW BACKENDS Alive alone
Source
be/src/runtime/memory/mem_tracker_limiter.cppbe/src/service/doris_main.cpp— jemalloc init, signal handlerfe/.../master/HeartbeatHandler.javabe/src/common/config.cpp—mem_limit,enable_je_purge,max_segment_cache_size
04 同仓库更多 Skills
doris-pr-description
Write, rewrite, or check the title and description of an Apache Doris pull request against the Doris PR standard. Takes the facts from the handoff file that development left when there is one, and collects them from the diff, commits, linked issue, and existing tests otherwise; classifies the PR type, fills that type's required fields, drafts the issue a Feature needs, validates the draft with a bundled checker, and creates or updates the PR on GitHub only after the user confirms. Use whenever the user wants to open, create, submit, or update a Doris PR; write, fix, or improve a PR title or description; prepare a branch for review; rewrite an existing PR's description for comparison; or check whether a description meets the standard. Also use for short requests in any language, such as "open a PR", "write the PR description", or "is this PR description good enough?", even when the standard is not mentioned.
develop-with-evidence
暂无简介
doris-repo-review
Review an Apache Doris PR from a local clone with the same multi-agent, shared-ledger convergence workflow as the CI Code Review Runner. Use when the user supplies a PR to `/doris-repo-review`, asks to review a Doris PR locally, or asks for the CI-style review flow. Safely align only the current worktree to the exact PR head, refuse to disturb tracked local changes, write equivalent English and Chinese review documents with verified path-line anchors, and never build, test, or edit source. Treat a review as pipeline-equivalent only when an explicitly selected qualified reviewer uses a supported effort (xhigh or max, plus ultra for Codex), preferring GPT-6 Astra on Codex and Fable 5.1 on Claude Code. After a converged APPROVE result, automatically post one machine-readable PASS comment bound to the reviewed commit.
doris-profile-reader
Interpret Apache Doris query runtime profiles, especially profile bottleneck triage, misleading wait counters, per-operator metric priority, scan, join-order/runtime-filter analysis, and evidence-bounded performance explanations. Use when given a Doris profile, query id, profile URL/text, or a request to explain Doris query performance.
doris-debug-tablet
Use for Doris tablet/replica health, version skew, clone backlog, disk balance, and tablet repair. Commands: SHOW PROC tablet_health, SHOW TABLET, ADMIN REPAIR.
doris-debug-resource-isolation
Use for Doris Workload Group / resource tag queue starvation, CPU/memory isolation leaks, and workload policy debugging. Commands: SHOW WORKLOAD GROUPS, EXPLAIN resource.