Capacity and concurrent jobs

Capacity is how many IaC jobs one agent executes at the same time. The Overview Utilization metric is the share of online runners that currently have at least one job.

♣
Total runners12
●
Online10
●
Running7 Utilization: 70%
●
Idle3
⚙

How capacity works

Each runner can execute multiple IaC jobs in parallel, up to its maxConcurrentJobs limit. The scheduler assigns a new job to a runner only if activeJobs < maxConcurrentJobs.

Jobs in queue

▧   Job 1
▧   Job 2
▧   Job 3
→
▰
Runner (maxConcurrentJobs = 3)
⚙   Running Job 1
⚙   Running Job 2
⚙   Running Job 3
→
✓

All jobs run
in parallel
(up to limit)

▤

Per-runner limit

ConstantValue
Minimum maxConcurrentJobs1
Maximum100

The control plane scheduler and the agent both honor this value. Organization plans can impose a lower cap; the edit dialog helper text shows Organization limit: N when one exists.

i

Kubernetes agents often register with maxConcurrentJobs: 50 (AXIO_RUNNER_MAX_CONCURRENT_JOBS to override).

!

If inventory still shows “Running 1 job” at 1/1 after you expected more parallelism, the row may be on an older image or a stuck RUNNING workload. Cancel the run or restart the agent so heartbeats reconcile activeJobs.

⌁

When a runner is “full”

The scheduler treats a runner as busy when activeJobs >= maxConcurrentJobs. That agent will not receive another lease until a job completes.

Example (maxConcurrentJobs = 2)
Running 2 jobs (2/2) Full
Running 1 job (1/2) Not full
Idle (0/2) Available

Overview Running counts those busy online runners. Idle is online with zero active jobs.

♣

Fleet size

ScopeDescription
Group maxRunners Optional cap on self-hosted agents in that group.
Plan maxCustomerRunners Org-wide cap on customer-hosted agents.
Hosted fleet Tenant minutes/storage limits (maxProviderExecutionMinutes, maxProviderStorageBytes), not a visible runner count.
i

Autoscaling (AUTO / SCHEDULED on the runner platform) mints tokens and launches infrastructure up to maxRunners on the internal pool. Manual Setup registration ignores that provisioner until you enable it.

See deployment and RUNNER_DEPLOYMENT

↻

Lifecycle modes (internal pool)

ModeBehavior
PERSISTENTStay registered until you remove or scale down.
EPHEMERALIdle managed runners terminate on scale-down.
DYNAMICOne runner per queued job (up to maxRunners).

Ephemeral assignment

ScopeBehavior
JOB (default)One ephemeral runner per job.
WORKFLOWSame runner for all workloads that share workflowRunId.
i

These are pool/policy settings, not Overview columns. Tenants usually run persistent self-hosted agents from Setup.

●

Utilization alerts

Utilization above 85% is highlighted on the overview chip. Add runners, raise maxConcurrentJobs (if the host can take it), or move work to hosted labels.

92% 7 of 10 runners busy
!
High utilization

Utilization is above 85%. Consider adding runners, raising maxConcurrentJobs, or using hosted labels.