Build1 distinct publisher3 min readPublished
Steal at 32.73% with no idle left means the guest had runnable work and no physical core to run it on. That is the one failure mode neither profiling the backend nor buying a bigger plan can reach.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The accounting is what makes this reading actionable. Steal is the interval in which the guest had a runnable task, the vCPU asked for a physical core, and the hypervisor did not schedule it; Linux bills that time to steal instead of to your workload [14]. KVM exposes the counter for exactly that purpose, so a guest can observe time in which its vCPU was not executing [13]. What the counter does not carry is a cause. Host utilization, neighbour count, overcommit ratio, scheduler policy, vCPU pinning and host-side quotas are all invisible from inside the guest [15].
Add the columns up. User plus system plus softirq is 67.28% [19], and 67.28 plus 32.73 is 100.01, which is where the 0.00% idle comes from [21]. The write-up sets up the contrast itself: user and system near 100% with steal at zero and idle at zero is a sizing problem, and you either optimize the workload or buy more CPU [23]. This ledger is the other case. The same single vCPU with steal at zero would have executed about 1.49 times as much guest time [20]. The workload was asking for considerably more than that, with a runnable queue peaking at 11 [4] and load average between 3.5 and 4.0 on one vCPU [5].
It also was not a scheduler hiccup. The per-second samples stayed in a band from 30.69% to 35.35%, a spread of 4.66 points across the observation [17][18], and the equivalent stalled time works out to 19.64 seconds inside a 60-second window, accumulated in small pieces rather than one freeze [16]. Pressure Stall Information had "some" CPU pressure near 99 on the 10, 60 and 300 second averages [6], so the contention predates the measurement window. Available memory is a comforting metric that rules out exactly one thing [8].
Now the upgrade decision, which is where this matters. Buying a second vCPU buys a second claim on the same host. Whether that claim gets honoured depends on the host's spare capacity, and the guest cannot see it [15]. So the expected return on the upgrade is unknown before you pay, which is a bad property for the default remedy.
For the number to transfer to your machine, a fair amount would have to be true. It is one guest, one minute, under one production workload, with no synthetic load generator involved [12]. The author says plainly that this is not a review of the provider and not a claim about every VPS they run [10], and cancelled rather than resized [11]. And the awkward part for the framing in the dev.to headline, which contrasts AVA Hosting saying "no sharing" with Linux reporting 32.73% steal [9]: steal cannot distinguish a busy neighbour from a host-side cap applied to this one VM [15]. Both fit the data. A provider can be telling the truth about oversubscription and still hand a guest a third of its accounted time as steal, if the cap is per-VM.
In my own practice, sustained double-digit steal is a support ticket, not a code review, and I collect a week of samples before I file either. That threshold is mine, not something this minute of data establishes. What the data does establish is the order of operations: read the steal column before you read your own flame graph, because one of those two tells you whether the machine you are profiling exists.
Ranked by verification strength, evidence, and original report placement.
A 60-second mpstat observation on the VPS averaged 32.73% CPU steal and 0.00% CPU idle.
The same 60-second observation averaged 52.52% user, 8.07% system, 6.69% softirq and 0.00% iowait.
The instance was a KVM VPS with 1 vCPU, 2 GB RAM and 25 GB NVMe.
The maximum runnable queue observed during the window was 11.
Load average on the single-vCPU machine was around 3.5 to 4.0.
Linux Pressure Stall Information showed CPU 'some' averages of avg10=99.00, avg60=99.12, avg300=98.92, and later 99.19, 99.16 and 98.98.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 1, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
One mpstat run pinned 93% steal on a 2-vCPU VPS whose app was nearly idle1 distinct publisher
build
The ICO fines what you cannot prove: Article 32 makes encryption and erasure an engineering liability1 distinct publisher
product
MinIO went dark on 13 February. Docker will keep patching it until 2031, for a fee.1 distinct publisher
build
Build concurrency on one VPS is a division problem, and the app you serve pays the remainder1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Thorough on one side of the wall
The instrumentation is unusually disciplined for a personal post — averaged and per-second mpstat, PSI, socket queue depths before and after, memory and filesystem checks — and the numbers agree with each other: 67.28% executed plus 32.73% stolen leaves exactly the 0.00% idle reported. What no one holds is the other half: host utilization, neighbour count and overcommit ratio are invisible from the guest, and AVA Hosting has not put a figure of its own on the record. The author says so himself, which is why the readings read as credible while the cause stays unproven.
One machine, one minute
Scale here is a single 1-vCPU plan observed for sixty seconds, followed by a cancellation. No other tenant has posted matching steal figures from the same provider, no second region or time window is sampled, and there is no way to distinguish a busy node, a busy hour, or a standing oversubscription policy. Treat it as a data point, not a pattern.
The headline picks a fight the body declines
'AVA Hosting Said "No Sharing." Linux Reported 32.73% CPU Steal' promises an indictment; three paragraphs later the author says this is not a negative review and that one machine proves nothing about the rest. The arithmetic is if anything under-sold — a 1.49x execution penalty on a single vCPU is a serious number — so the stretch lives entirely in the packaging, where a provider-wide accusation is implied by a measurement that can only support 'possible contention on the node I was on'.
The witness is also the plaintiff
A customer who cancelled is publishing on his own account and quoting the provider's marketing pages back at it — motive is plainly in the frame, even though no referral link, sponsor or rival host appears anywhere in the piece, and he draws the boundary of his claim himself. The sharper imbalance is on the other side: AVA Hosting sells CPU isolation as a feature and has every reason to produce host-side scheduling data if the readings are wrong, and none of that has been asked for or offered.
Enough to act on, not enough to conclude
Two things hold up well: the guest really did report about a third of its CPU accounting as steal with nothing left idle, and no amount of backend profiling or extra RAM would have touched that. Everything past the guest boundary — whether the node was oversubscribed, whether an isolation promise was breached, whether other customers see the same — rests on one unreplicated minute recorded by one person with a cancelled invoice.