Skip to content

ci(python): the GraalPy experimental leg loses its runner 18–25 minutes into its tests on every recent run #1740

Closed

Description

@JarryShaw

Describe the bug
In about an hour, the Python graalpy-25.4 (experimental) leg lost its runner three times out of three, each time partway through Run unit tests:

Run Job Test step ran Last lines
#1734 (ba67ef70e) 115975614204 18 min The runner has received a shutdown signal / The operation was canceled.
main e530f39ad 116009492040 25 min 11 s same
main 34a197dd6 116013863229 21 min 12 s same

The step's cap is 25 minutes. Two of the three ended well before it, so the cap is not what ends them.

Expected behavior
The leg ends on its own result or on its cap, not on a lost runner.

Additional context
The cause is not measured yet. Running out of memory or disk on the runner is the leading guess, since #1372 once wrote 6 GB per run on another leg. Until #1732 merges, this leg sits in test, so every push to main fails Required checks passed (#1738). After #1732 it runs in its own job and gates nothing, but it may still never finish. The next step is to record free -m and df -h in the background during that job's test step.

Activity

  1. added
    ciPull requests that change CI or workflow configuration (ci: subject prefix)
    blockedDeferred pending another issue or decision; see the last comment for what unblocks it
    pendingAccepted and unstarted - nobody is on it and nothing blocks it
    and removed
    blockedDeferred pending another issue or decision; see the last comment for what unblocks it
    on Oct 14, 2026
  2. moved this to Pending in PyPCAPKiton Oct 14, 2026
  3. added
    blockedDeferred pending another issue or decision; see the last comment for what unblocks it
    and removed
    pendingAccepted and unstarted - nobody is on it and nothing blocks it
    on Oct 14, 2026
  4. moved this from Pending to Blocked in PyPCAPKiton Oct 14, 2026
  5. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    A fourth case, the same way: main d06701064, job 116021448652, Run unit tests ran 18:21:32Z→18:47:07Z (25 min 35 s) and ended with The runner has received a shutdown signal. The four step durations so far are 18, 25.2, 21.2 and 25.6 min.

  6. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    A fifth case, of a different shape, on main 4e1720c44: job 116014068117. Run unit tests started at 18:13:36Z and never reported a conclusion. The job was cancelled at 19:06:05Z, 55 min after it started, which is past both the step's 25-minute cap and the job's 45. No error line was logged. A runner that went silent, so that neither cap could fire, fits resource exhaustion better than an ordinary shutdown.

  7. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    A sixth case. This one rules out the cap: #1742's own Experimental Tests run 38623641661, job 116057255255. The tests step is capped at 120 minutes there, yet it ran only 30 min 12 s (19:30:01Z→20:00:13Z) before The runner has received a shutdown signal. The losses so far came 18 to 30 minutes in, plus one silent cancellation at 55. The split works as designed: the workflow run concluded success, and nothing waited on it.

  8. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    #1742 has merged, so this is unblocked. A worker is adding a background resource monitor to the experimental tests step: free -m, df -h and the top processes by RSS every 30 s, uploaded as an artifact even when the runner is lost partway. The goal is to measure what exhausts the runner rather than guess.

  9. added
    wipWork in flight - a covering PR is open or an agent is actively on it
    and removed
    blockedDeferred pending another issue or decision; see the last comment for what unblocks it
    on Oct 14, 2026
  10. moved this from Blocked to WIP in PyPCAPKiton Oct 14, 2026
  11. JarryShaw commented on Oct 14, 2026

    @JarryShaw
    OwnerAuthor

    The owner has set the bar: a non-blocking leg may fail only as a warning, and its check must stay green. Today the GraalPy check is the only red on main, on 0cdd3cdd1 and 65122bf89. The workflow run itself concludes success, but a lost runner fails the job, and no workflow setting can turn that job green. The fix therefore has to keep the runner alive, so that the tests fail inside a step that continue-on-error contains. That means capping the test process's memory and file size, cutting GraalPy's parallelism, and ending it with timeout before the step cap. This goes into this issue's PR alongside the resource monitor, and the same containment goes onto the KTLO jobs in #1738.

  12. JarryShaw commented on Oct 15, 2026

    @JarryShaw
    OwnerAuthor

    First run under the containment (#1749, job 116172356218): the runner survived, and the check is green with warnings.

    • Exit: pytest exited 3 (internal error) after 1005 s, inside the 12G scope. There were 0 OOM kills and 1 MemoryError line.
    • Last sample: 8069 MiB used of 15988 MiB, with 7919 MiB available.
    • Reading: the tests now fail inside the step instead of taking the runner down. The MemoryError with the machine half free points at the 2 GB per-process heap (--vm.Xmx2g), most likely in the xdist controller, as the next thing to tune.
  13. JarryShaw commented on Oct 15, 2026

    @JarryShaw
    OwnerAuthor

    Done by #1749, now on main as dd846e3cf. On its run (job 116172356218) the runner survived and the leg ended on its own result, green with warnings, which is this issue's expected behaviour. The early stop that remains, an xdist worker MemoryError, is a separate cause and is now #1753.

  14. removed
    wipWork in flight - a covering PR is open or an agent is actively on it
    on Oct 15, 2026
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

    ciPull requests that change CI or workflow configuration (ci: subject prefix)

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions