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:
- 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.
- 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:
- Increase default ThrottleInterval in generated plists β 1s is dangerously aggressive. 5β10s minimum.
- 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.
- 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.
βββ