Dedicated vCPU on 2022+ server CPUs · NVMe · no KYC. Pay in crypto: BTC, USDT, USDC, ETH, SOL, LTC, XMR
Language: English
Pick your cores

Guide · GitLab Runner · CI/CD

How many dedicated vCPU does a GitLab Runner VPS need?

What VPS do I need for a GitLab Runner or a CI/CD pipeline? How many jobs a dedicated-vCPU VPS runs at once, how GitLab's hosted runner sizes compare, and how to keep parallel builds from fighting over threads.

Last updated: · 8 min read

Quick answer

What VPS do I need for a GitLab Runner or a CI/CD pipeline?

A GitLab Runner VPS needs about 2 dedicated vCPU for each CI job that runs at the same time: on Cobaltfell, Fell 2 takes one job, Fell 4 two and Fell 8 four. GitLab's default hosted Linux runner has 2 vCPU and 8 GB of RAM (checked 2 November 2026), so a Cobaltfell plan with the same vCPU count has half that memory, and memory-hungry builds need the next size up.

How many CI jobs can one VPS run at the same time?

One CI job needs two dedicated vCPU and the RAM that comes with them; the runner's concurrent setting decides how many such jobs share the VPS. In config.toml, concurrent caps the jobs across all registered runners, and limit caps them for one registered runner (0, the default, means no limit). GitLab's requirements page names the three inputs to size from: the CPU load of the jobs, their memory use and how many run concurrently.

Starting points taken from tool defaults, not timings. Our own YABS and Geekbench 6 results, together with the steal time we measure, will be published with their date once our first test machine is delivered. Until then we quote no performance figure of our own.
PlanvCPURAMconcurrentFits
Fell 224 GB1One pipeline at a time: a personal project or a team that pushes a few times an hour
Fell 448 GB2Two short jobs at once, or one long build on four threads
Fell 8816 GB4Four jobs of two vCPU, or two of four
Fell 161632 GB4 to 8A team whose merge requests start several pipelines at once

How do GitLab's hosted runner sizes compare with a VPS?

GitLab's hosted Linux runners give 4 GB of RAM per vCPU; Cobaltfell plans give 2 GB per vCPU. The vCPU counts line up one for one, which makes the table a direct way to pick a size for pipelines that already run on GitLab.com. Jobs that use most of the memory of their current machine need the Cobaltfell plan one size up, or fewer jobs at once.

According to Cobaltfell's survey of 2 November 2026, one dedicated vCPU on a processor from 2022 or later cost a median $8.20 a month at hosts that take crypto without an ID check, so each parallel CI job of two vCPU costs about twice that.

Every host and price behind that median is in what a dedicated CPU VPS costs per core in November 2026.

GitLab machine types as listed in GitLab's hosted runner documentation on 2 November 2026. A hosted runner serves one job per machine; a self-hosted runner on a VPS shares its vCPU between several jobs.
GitLab-hosted machine typevCPURAMDiskVPS plan with the same vCPUIts RAM and NVMe
saas-linux-small-amd64 (default)28 GB30 GBFell 24 GB, 80 GB NVMe
saas-linux-medium-amd64416 GB50 GBFell 48 GB, 160 GB NVMe
saas-linux-large-amd64 (Premium and Ultimate)832 GB100 GBFell 816 GB, 320 GB NVMe
saas-linux-xlarge-amd64 (Premium and Ultimate)1664 GB200 GBFell 1632 GB, 640 GB NVMe

Prices checked on

Why do dedicated cores matter for CI and compile jobs?

A build holds the CPU at full load for minutes at a time, the exact pattern that shared VPS plans are written to limit. Two hosts in the same survey put it in their rules: Spartan Host's terms forbid using more than 50% of the allocated cores for more than an hour, and Advin Servers' fair-use policy caps CPU use at 75%.

On a shared vCPU the cost also appears as steal time. A pipeline that is quick on a quiet night stretches at peak hours, and job timeouts fire for reasons unrelated to the code; what CPU steal time is and how to check it on a VPS shows how to read it.

At Cobaltfell: Full load is allowed for as long as your work needs it: no CPU credits, no burst window and no throttling after some minutes at 100%. A vCPU is one hardware thread of the host processor. Yours are pinned one to one to your VPS and never lent to another customer, and the two threads of a physical core stay together, so every 2 vCPU make one whole core that no neighbour shares. With no neighbour on the threads, a cache-warm pipeline takes about the same time on every run, so a slow job points at the code. How the vCPU-to-core rule works is explained in is a dedicated vCPU a core or a thread.

How do I stop parallel builds from fighting over the same vCPU?

Give each job a fixed share of the VPS and pass the same number to the build tool. Build tools disagree on defaults. GNU make runs one recipe at a time unless given -j. Cargo runs as many jobs as there are logical CPUs. Ninja runs in parallel based on the CPU count without being asked. Four such builds on Fell 8 would each start eight compilers: 32 processes for 8 threads and 16 GB of RAM.

With the Docker executor, each job runs in its own container, and [runners.docker] takes a cpus and a memory limit for that container. Set both, then match the parallelism inside the job:

config.toml for four jobs of two vCPU each on Fell 8
concurrent = 4            # jobs at once, all runners together
check_interval = 3

[[runners]]
  name = "fell-8-docker"
  url = "https://gitlab.com"
  token = "REPLACE_WITH_YOUR_RUNNER_TOKEN"
  executor = "docker"
  limit = 4
  [runners.docker]
    image = "debian:13"
    cpus = "2"             # CPUs for each job container
    memory = "3g"          # leaves room for the system and Docker
Matching parallelism inside .gitlab-ci.yml
variables:
  MAKEFLAGS: "-j2"          # GNU make
  CARGO_BUILD_JOBS: "2"     # cargo (build.jobs)

build:
  script:
    - make
    - cargo build --release
    - ninja -C build -j 2

What does compiling Rust or C++ need on a VPS?

Compiles need threads and memory in step: every parallel compiler process and every link step takes its own share of RAM. Large C++ translation units and Rust crates with heavy generics are the usual memory peaks, and the final link of a big binary can need more than any single compile.

A build killed for lack of memory needs a lower -j or CARGO_BUILD_JOBS, not more vCPU: fewer jobs finish, more jobs crash. Keep build caches on the VPS's own disk (NVMe storage on every plan) and prune old images with docker image prune, because a busy runner fills a disk faster than its pipelines suggest.

A monorepo that needs tens of gigabytes of RAM per build is bare-metal territory, which Cobaltfell does not sell. Database-backed test suites have their own sizing rules, covered in how much CPU and RAM PostgreSQL needs on a VPS.

Which executor should a runner on a VPS use?

The Docker executor is the right default: GitLab's executor guide says it gives each build a clean, isolated environment, while the Shell executor offers neither a clean environment per build nor protection of the runner's file system. The Shell, SSH and VirtualBox executors are in maintenance mode.

Who can start a job matters as much: a merge request from a fork runs its own code on the VPS. GitHub's security guide says self-hosted runners should almost never be used for public repositories, and the same reasoning applies to any CI system that runs untrusted pull requests.

Forgejo, Woodpecker, Jenkins and GitHub Actions agents size the same way: count overlapping jobs, give each fixed threads and memory. Plan prices for each size are listed under how much a dedicated-core VPS costs.

What other questions do people ask about CI runners on a VPS?

Can a Cobaltfell VPS run GitHub Actions self-hosted runners?

Yes. Any Linux runner agent works: Linux images only: Debian, Ubuntu, AlmaLinux and Rocky Linux. Windows is not offered. Size it like a GitLab Runner, about two vCPU per overlapping job, and keep it away from public repositories where strangers can open pull requests.

Is a build at 100% CPU for an hour throttled?

Not at Cobaltfell. Full load is allowed for as long as your work needs it: no CPU credits, no burst window and no throttling after some minutes at 100%. The only CPU-heavy use that is banned: Mining any cryptocurrency is not allowed, on any plan and with any software. Your own heavy CPU work, such as builds, encoding, inference or databases, may run at full load, and a node that only validates a blockchain is not mining.

Does GitLab Runner need Docker?

No, the Shell executor runs jobs directly on the VPS. GitLab notes that it gives no clean environment per build and that it is in maintenance mode, so Docker is the better default for anything you would not run by hand as root.

Should GitLab itself run on the same VPS as the runner?

No. GitLab and its runner then compete for the same threads and memory, and a heavy pipeline slows the web interface used to watch it. A runner belongs on its own VPS.

How fast is a pipeline on each plan?

No timings are published yet. Our own YABS and Geekbench 6 results, together with the steal time we measure, will be published with their date once our first test machine is delivered. Until then we quote no performance figure of our own. Run the same pipeline twice on the chosen plan and keep the second, cache-warm time as the baseline.

Sources (10)
  1. GitLab Runner advanced configuration (concurrent, limit, [runners.docker]) — GitLab (checked 2026-11-02)
  2. GitLab Runner system requirements — GitLab (checked 2026-11-02)
  3. GitLab-hosted runners on Linux: machine types — GitLab (checked 2026-11-02)
  4. GitLab Runner executors — GitLab (checked 2026-11-02)
  5. GNU make manual: parallel execution — GNU Project (checked 2026-11-02)
  6. cargo build: the --jobs option — The Rust Project (checked 2026-11-02)
  7. The Ninja build system manual — Ninja (checked 2026-11-02)
  8. Secure use reference: self-hosted runners — GitHub (checked 2026-11-02)
  9. Spartan Host terms of service spartanhost.org/tos — Spartan Host (checked 2026-11-02)
  10. Advin Servers fair use policy docs.advinservers.com/policies/fair-use — Advin Servers (checked 2026-11-02)

From $10.49/month · no KYC

Pick your cores