Skip to content

Control-plane freeze #3: full-tree metadata scan of JuiceFS mount starves node (memory exhaustion + storage stall) #4019

Description

@bayerhazard

Summary

Third occurrence of the node-wide control-plane freeze on Olares 1.12.6 (same host, same failure signature as reported in #3971). This time the trigger was not an LLM install/update but a full-tree metadata scan of the JuiceFS mount, which starved the entire node (etcd, rsyslog, sshd, kubelet) via memory exhaustion + storage stall.

Timeline (journal evidence)

Time Event
~20:15–20:30 Full-tree walk over /olares/rootfs (juicefs info-style output): 696,154 files / 95,430 dirs / 718 GiB traversed via FUSE + Redis metadata
20:31:07 etcd range requests begin hanging
~20:31–20:35 System-wide I/O stall: JuiceFS chunk read from local MinIO took 4m38s (slow request ... timeout after 1m0s, cost: 4m38.4s); etcd ranges 4m39s; rsyslog file actions suspended (log writes failing)
20:35:46–48 OOM killer fires (container killed, exit 137); sshd MaxStartups throttling; k3s remotedialer i/o timeout
20:36:09 Last journal entry — total freeze. Recovery only via physical reboot

Analysis

Hardening recommendations

  1. Bound metadata-heavy operations: run tree scans / size accounting under cgroup limits (e.g. MemoryMax) so they kill themselves instead of the node; avoid full-tree walks on live mounts during workload activity.
  2. Disable writeback_cache (synchronous uploads) to remove the un-flushed queue that amplifies stall windows.
  3. Add a storage-path watchdog / graceful degradation: a stalled FUSE mount should degrade affected workloads, not freeze etcd/sshd/kubelet.
  4. Consider a memory ceiling for the juicefs mount client process.

Classification

Systemic weakness (missing isolation + missing degradation), not a bug in a single component.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions