Skip to content

stream-video --format mjpeg grows without bound (~5–7 GB/min) on macOS 26.5.2 #72

Open

Description

@TheCommonHuman

Environment

  • AXe 1.8.0 (Homebrew tap cameroncooke/axe)
  • macOS 26.5.2 (25F84), Mac mini (Mac16,10, Apple silicon, 16 GB)
  • Xcode 26.x, iOS Simulator (iPhone 17 Pro runtime)

Command

axe stream-video --udid <UDID> --format mjpeg --fps 12 --quality 85 --scale .67

stdout piped to a Node process that reads continuously (flowing mode, never blocks), stderr drained.

What happens
The axe process's physical footprint grows linearly from the first frame and never plateaus. Measured with footprint(1):

  • ~110 MB/s sustained (44 MB → ~690 MB in 9 s)
  • 41 GB → 45 GB over 15 s at the 7-minute mark
  • A system stackshot caught it at 48.65 GB resident after 12 minutes, at which point WindowServer became unresponsive, watchdogd killed it, and macOS force-logged-out the graphical session.

ps RSS stays small (~280 MB) because the growth is in compressed/swapped pages; footprint -p <pid> or top's MEM column shows the real number.

Expected
Footprint stays roughly constant once streaming; frames already written to stdout should be released.

Notes

  • The consumer keeps stdout drained, so this doesn't look like pipe backpressure on our side.
  • Not tested with other --format values or fps; happy to run a specific comparison if useful.
  • Workaround in our tool: poll footprint and recycle the process past a limit.

I can share the full stackshot (WindowServer …userspace_watchdog_timeout.spin) privately if that helps.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions