#πŸ› Bug Report: Runaway process loop when Control UI is open under gateway load

1 messages Β· Page 1 of 1 (latest)

fiery seal
#

Version: 2026.3.28
OS: macOS (arm64)
Date observed: 2026-03-31 ~11:54 AM local time

What happened:
~30 openclaw-gateway processes spawned within minutes, crashing the gateway and making the Control UI unresponsive.

Root cause (from logs):
Two issues combined to cause the death spiral:

  1. ThrottleInterval: 1 in the launchd plist β€” when the gateway died, launchd restarted it every 1 second. The old process was still holding the port, so each new instance failed with "port already in use" and died again β†’ infinite restart loop stacking up 30+ processes.
  2. Control UI polling too aggressively β€” node.list and sessions.list WS calls were firing every few seconds from the UI. Response times escalated from normal ms β†’ 18s β†’ 44s β†’ 53s right before the crash. The gateway choked under the sustained load and died, triggering issue #1.

Log evidence (gateway.log, sanitized):
11:42 β€” node.list 17219ms (first sign of stress)
11:52 β€” sessions.list 18073ms
11:52 β€” node.list 44143ms
11:54 β€” sessions.list 10314ms
11:55 β€” node.list 53590ms ← gateway dies here
Immediately after: launchd restarts every 1s, port conflict loop begins.

Fix applied (workaround):

β€’ Bumped ThrottleInterval from 1 β†’ 10 in the launchd plist β€” prevents restart storm

Suggested fixes from OpenClaw side:

  1. Increase default ThrottleInterval in generated plists β€” 1s is dangerously aggressive. 5–10s minimum.
  2. Add backoff/debounce to Control UI polling β€” node.list firing every 5s while the gateway is already slow makes things worse. Consider exponential backoff when response times degrade.
  3. Gateway should detect port conflict on startup and exit cleanly instead of looping β€” currently it logs the error but launchd keeps hammering.

Reproducibility: Likely reproducible by keeping Control UI open with many sessions active for an extended period.

───

spring stoneBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> βœ… Mark Solution

stone adderBOT
#

This is a really solid bug report β€” thank you for writing it up this cleanly.

Your analysis checks out with current source:

  • launchd plist currently hardcodes ThrottleInterval=1 (src/daemon/launchd-plist.ts)
  • Control UI starts node.list polling at 5s intervals while connected (ui/src/ui/app-lifecycle.ts + ui/src/ui/app-polling.ts)
  • Gateway lock handling exists, but with KeepAlive=true + aggressive restart timing, launchd can still get into ugly restart churn when the old process/port hasn’t settled yet

Also worth noting: there’s a newer changelog fix for supervised crash-loop behavior (Gateway/supervision ... #52922), so this may already be improved beyond 2026.3.28.

If you haven’t already, please file this on GitHub so maintainers can track it directly (I can’t open issues myself):
https://github.com/openclaw/openclaw/issues

Your current post is basically issue-ready already β€” just paste it as-is plus:

openclaw --version
GitHub

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 - Issues · openclaw/openclaw