Skip to content

fix(runner): refuse a wave when the process table is nearly full - #109

Merged
abedegno merged 2 commits into
mainfrom
fix/process-table-guard
Sep 28, 2026
Merged

abedegno merged 2 commits into
mainfrom
fix/process-table-guard

Conversation

@abedegno

Copy link
Copy Markdown
Owner

What and why

On 2026-09-28 every wave from 11:26Z failed at gh issue list with a Go "failed to create new OS thread (errno=11)" trace. The runner container had hit its process limit: 38,076 of 38,079, of which about 35,900 were zombies. omnigent host (PID 12) is a child subreaper, and its orphan reaper had stopped collecting on 2026-09-16. The trace named neither the cause nor the fix. A container restart cleared it.

preflight_processes now runs first in every wave, before the kernel preflight and before any model call. It reads pids.current and pids.max with shell builtins only, because a full table cannot start cat either. It warns at 50%, and at 90% refuses the wave with the zombie count and the restart command. Where there is no cgroup limit (macOS, no cgroup v2, or max) it skips.

Effect on the merge gate

None.

Testing

  • bash batch/run-queue.sh --self-test passes (macOS; Linux via CI)
  • New behaviour has test cases: tests/execution/test_preflight_processes.py covers refuse, warn, healthy, no limit, no cgroup files, and that it runs before preflight_kernel in main
  • Guards shown red first: all six tests failed before the function existed

Whole suite: 2027 passed, 3 skipped.

Anything a reviewer should look at twice

The underlying stall is omnigent's. We are upgrading to v0.15.0 before deciding whether to report it upstream. This guard only makes the failure legible and early.

…ly full

omnigent host's orphan reaper stalled on 16 September and ~35,900 zombies
filled the runner's pids limit; every wave from then on died at its first
command with a Go thread-creation trace from gh that named neither cause
nor fix. preflight_processes now runs first, reads pids.current/pids.max
with builtins only (a full table cannot start cat), warns at 50%, refuses
at 90% and names the zombie count and the restart.
@abedegno
abedegno merged commit 8b8f70d into main Sep 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant