{"id":888,"date":"2026-08-14T23:15:27","date_gmt":"2026-08-14T23:15:27","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=888"},"modified":"2026-09-24T22:03:04","modified_gmt":"2026-09-24T22:03:04","slug":"cpu-steal-vps-performance","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/","title":{"rendered":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS infrastructure it is the most common cause of &#8220;the server feels slow but nothing is using the CPU&#8221; complaints. Unlike memory pressure or a misconfigured application, steal is invisible in <code>htop<\/code> unless you know which column to read, and it cannot be fixed with more RAM or a faster framework. This guide explains how to measure steal reliably, what the numbers mean, and what actually reduces it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How CPU steal shows up in your metrics<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On Linux, the kernel accounts steal time in the <code>st<\/code> column of <code>top<\/code>, <code>vmstat<\/code>, and <code>mpstat<\/code>. It appears whenever the hypervisor schedules a different virtual machine on the physical core your vCPU depends on. The telltale signature is high <code>st<\/code> with low <code>us<\/code> and <code>sy<\/code>: the CPU is not busy doing your work \u2014 it simply was not given time to do it.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tool<\/th><th>Command<\/th><th>What to look at<\/th><\/tr><\/thead><tbody><tr><td>top \/ htop<\/td><td><code>top -d 2<\/code><\/td><td><code>st<\/code> column; sustained &gt;5% while load is high<\/td><\/tr><tr><td>vmstat<\/td><td><code>vmstat 1<\/code><\/td><td>second <code>st<\/code> column (percentage of total CPU)<\/td><\/tr><tr><td>mpstat<\/td><td><code>mpstat -P ALL 1<\/code><\/td><td>per-vCPU <code>%steal<\/code>; one hot vCPU points to a single noisy neighbor<\/td><\/tr><tr><td>sar<\/td><td><code>sar -u 1 5<\/code><\/td><td><code>%steal<\/code> historical trend if sysstat is installed<\/td><\/tr><tr><td>pressure<\/td><td><code>cat \/proc\/pressure\/cpu<\/code><\/td><td>some total= value is real stall, not just steal<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A single reading proves nothing. Steal of 15% for two seconds during a backup window is normal; steal of 8% sustained for twenty minutes across every sample is a capacity problem. Sample with <code>sar<\/code> or a loop, and compare against the same hours on the previous day before concluding anything.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 60 samples, print steal only\nfor i in $(seq 60); do\n  mpstat 1 1 | awk '\/Average\/ {print $3\"% us  \"$6\"% steal\"}'\ndone<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Separating steal from your own CPU use<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The critical distinction is whether your workload is the cause. If <code>us<\/code> plus <code>sy<\/code> is low and <code>st<\/code> is high, the hypervisor is starving you. If <code>us<\/code> is high and <code>st<\/code> is low, your own processes are simply busy and the fix is at the application layer. A workload that saturates its own vCPUs can also trigger more steal because the hypervisor is more likely to preempt a busy guest.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run this comparison on a schedule so you have a baseline before the complaint arrives:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vmstat 1 10 | tail -n +2 | awk '{print \"us=\"$13\" sy=\"$14\" id=\"$15\" wa=\"$16\" st=\"$17}'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">What actually reduces steal<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Fewer vCPUs, not more.<\/strong> On a contended host, adding vCPUs multiplies the number of cores the scheduler can preempt you on. A 2-vCPU plan often shows less steal than an 8-vCPU plan on the same host.<\/li><li><strong>Move to a dedicated-vCPU tier.<\/strong> Pinned or dedicated cores carry a lower oversubscription ratio. This is the only real fix when you are genuinely starved.<\/li><li><strong>Reduce your own CPU demand.<\/strong> Cache aggressively, cut polling intervals, and profile hot paths so you need fewer cycles.<\/li><li><strong>Migrate hosts.<\/strong> Live migration to a less-loaded physical node sometimes helps, but it can also land you on a worse neighbor.<\/li><li><strong>Check the provider&#8217;s oversubscription.<\/strong> Some plans advertise &#8220;shared&#8221; cores at 4:1; others run 12:1. The ratio predicts steal far better than the clock speed on the spec sheet.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Turning steal into a decision<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Keep a rolling log of steal and correlate it with user-visible latency. If p95 response time tracks steal, you have a hosting problem and should move to guaranteed CPU. If latency spikes with stable steal, the bottleneck is inside your stack and no amount of extra vCPU will help.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># log steal every 5 minutes for a week\necho '*\/5 * * * * mpstat 1 1 | awk \"\/Average\/ {print strftime(\\\"%F %T\\\"), \\$6}\" \\\n  &gt;&gt; \/var\/log\/steal.log' | crontab -<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Measure first, then act: steal is one of the few VPS performance problems where the diagnosis is cheap and unambiguous once you sample over time. When the numbers show genuine starvation, choose a plan with dedicated CPU rather than throwing more shared cores at it \u2014 that is the difference between fixing the problem and paying for a smaller version of the same one. Review our <a href=\"https:\/\/virtualserversvps.com\/\">VPS plans<\/a> with dedicated or pinned cores when the log proves you are starved, and compare <a href=\"https:\/\/virtualserversvps.com\/\">managed versus unmanaged options<\/a> if you would rather not run the sampling yourself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A note on cloud burst and credit-based plans<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Some providers sell &#8220;burstable&#8221; CPU plans where a baseline is guaranteed and short bursts are allowed up to a ceiling. These plans do not show classic steal \u2014 instead they throttle you by reducing the CPU quota, which appears as <code>us<\/code> and <code>sy<\/code> falling while wall-clock work still takes longer. If your throughput drops without <code>st<\/code> rising, check the provider&#8217;s CPU credit counter before concluding the host is contended. The two problems look identical to a user and completely different in the metrics, which is why sampling both steal and effective throughput matters.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Building a steal baseline you can trust<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collect data when the server is healthy, not just when it is slow. A baseline taken during quiet hours tells you what &#8220;normal&#8221; looks like on your host, so a reading of 3% during peak traffic is immediately interpretable. Tag samples by hour of day and day of week; many hosts concentrate contention in business hours or during a specific tenant&#8217;s nightly batch, and a pattern across time is far more actionable than any single spike.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS infrastructure it is&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-888","post","type-post","status-publish","format-standard","hentry","category-performance-optimization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix\" \/>\n<meta property=\"og:description\" content=\"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-14T23:15:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-24T22:03:04+00:00\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/\",\"name\":\"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-08-14T23:15:27+00:00\",\"dateModified\":\"2026-09-24T22:03:04+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix - Virtual Servers VPS Blog","description":"CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/","og_locale":"en_US","og_type":"article","og_title":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix","og_description":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix","og_url":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-08-14T23:15:27+00:00","article_modified_time":"2026-09-24T22:03:04+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/","url":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/","name":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-08-14T23:15:27+00:00","dateModified":"2026-09-24T22:03:04+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"CPU steal is the percentage of time your virtual machine wanted to run but the hypervisor gave the physical CPU core to another tenant. On shared VPS","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/cpu-steal-vps-performance\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Measuring Sustained CPU Steal on a VPS and Choosing the Right Fix"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=888"}],"version-history":[{"count":3,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/888\/revisions"}],"predecessor-version":[{"id":1215,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/888\/revisions\/1215"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}