Skip to main content

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.

Informations de source

Dépôt
apache/doris-skills
Dernière activité de la source
24 juillet 2026 à 23:41
Langue détectée de SKILL.md
anglais
Étoiles
46
Forks
15

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
5 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
doris-debug-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.
version
0.2.0
category
node
# 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 ```bash # 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) ```bash # 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 ``` ```properties # 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 ```bash # 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.cpp` - `be/src/service/doris_main.cpp` — jemalloc init, signal handler - `fe/.../master/HeartbeatHandler.java` - `be/src/common/config.cpp` — `mem_limit`, `enable_je_purge`, `max_segment_cache_size`
Voir sur GitHub