Skip to content
compiler.dev

Why Is GitHub Actions Slow? Causes and Fixes

If GitHub Actions is slow, the cause is rarely "GitHub is down". More often it is a mix of queue time, a small runner, a cold cache and slow downloads. This guide helps you work out which one you have when GitHub Actions is running slow, including the "GitHub Actions slow today" case where nothing changed on your side. It is part of the slow CI guide.

First: is it GitHub being slow today?

Check githubstatus.com. It lists incidents for Actions, including degraded performance and delayed jobs. If an incident is open, queue time and run time are likely affected and your workflow is fine. Two other quick checks:

  • Open the same workflow's last 10 runs. If durations jumped for every job on the same day with no commit to the workflow, suspect the platform or a changed dependency.
  • Compare the queued time (before the job starts) with the step durations. Platform trouble usually shows up as queue time, not step time.

If status is green and the slowness is steady, keep reading. Most "slow today" problems are slow every day.

Cause 1: queue time

A job that waits before it starts is queued, not slow. Common reasons:

  • Your plan's concurrency limit is reached, so jobs wait for another to finish. Large matrices make this worse; GitHub documents a maximum of 256 jobs per matrix.
  • A schedule or cron job fires at the top of the hour, when GitHub notes load is highest.
  • Self-hosted runners are offline, busy or out of capacity. A self-hosted job can wait up to 24 hours before it is cancelled.
  • Larger runners with a small autoscale ceiling.

Fixes: lower matrix width or use max-parallel, cancel superseded runs with concurrency, move scheduled jobs off :00, and add runner capacity. The time limits guide lists the documented limits.

Cause 2: small 2-core runners

The standard Linux runner has 2 vCPUs, 7 GB RAM (see the runner specs tool). A test suite, TypeScript build or Docker build that is CPU-bound will take longer there than on your laptop. Signs: CPU pinned near 100 percent in the job, tests slowing when you add workers, out-of-memory kills.

Fixes, cheapest first: use incremental builds and fewer parallel workers than cores; shard the tests; then move heavy jobs to more cores. Faster GitHub Actions runners compares GitHub larger runners, self-hosted and third-party runners. For hosted options, compiler.dev ran faster than GitHub's 2-core runner on 15 of 19 benchmarked stacks, by 1.1 to 3 times, at $0.009 per minute for Linux 8 vCPU; test it on your own jobs with comparison mode.

Cause 3: cold caches

If npm ci, pip install or a Docker build takes 3 minutes every run, the cache is missing or evicting. Check the cache step log for "Cache not found" or "Cache restored". GitHub caps cache storage at 10 GB per repository by default and evicts when over the limit, so a busy repository can thrash its own cache. See cache limits and eviction and the caching basics. Docker builds have their own options in Docker layer caching.

Cause 4: network and slow downloads

Slow download steps ("GitHub Actions slow download") come from:

  • Pulling large base images from Docker Hub, which can rate-limit anonymous pulls. Pull from a registry mirror or use a smaller base image.
  • Downloading toolchains or browsers on every run (Playwright browsers, JDKs, Xcode simulators). Install only what you need and cache it where that is faster than re-downloading.
  • Fetching a full git history. Use fetch-depth: 1 unless you need history.
  • Slow external registries or package mirrors; a dependency proxy near your runners helps.
- uses: actions/checkout@v4
  with:
    fetch-depth: 1

Cause 5: the work itself

If queue and setup are small, the tests or build are the problem. Per-framework guides: Playwright, Cypress, Jest, Vitest, pytest, and the slow e2e tests hub.

A 5-minute diagnosis

  1. Open githubstatus.com.
  2. In a slow run, note queued time, then the three slowest steps.
  3. If queued is high: concurrency, matrix, schedule, runners.
  4. If install or download is high: cache and image size.
  5. If test or build is high: parallelism, sharding, runner size.

The speed-up guide turns each finding into a YAML change.

FAQ

Why is GitHub Actions running slow today?

Check githubstatus.com for an Actions incident first. If there is none, compare queue time with step time in a recent run. A sudden rise in queue time points at platform load or your concurrency limit.

Why is GitHub Actions slower than my laptop?

The default Linux runner has 2 vCPUs and a cold disk and cache. Your laptop likely has many more cores and a warm cache.

Why is my GitHub Actions download slow?

Usually large images or toolchains downloaded on every run. Cache them, shrink them, or mirror them.

Will paying for larger runners fix it?

Only if the job is CPU-bound. They do not fix queueing caused by concurrency limits or slow external services. Measure first.

Made by compiler.dev. Free tools · Pricing