{"id":32213,"date":"2026-07-21T15:03:00","date_gmt":"2026-07-21T13:03:00","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=32213"},"modified":"2026-07-22T12:04:35","modified_gmt":"2026-07-22T10:04:35","slug":"shared-hosting-memory-limits","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/shared-hosting-memory-limits\/","title":{"rendered":"Your Shared Hosting Upgrade Won&#8217;t Save Your Docker Containers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Why does shared hosting keep hitting memory limits, even after you upgrade? Shared hosting pools CPU and RAM across every account on the same physical server. A plan upgrade within shared hosting usually buys you a higher quota on that shared pool, not a guaranteed, isolated allocation \u2014 so Docker containers still get OOM-killed and pages still load slowly once your actual usage bumps into the pool&#8217;s real ceiling. The fix in both cases is the same: move to infrastructure where the resources are exclusively yours.<\/p>\n\n\n\n<h2 id=\"h-why-docker-containers-fail-with-memory-errors-on-shared-hosting\" class=\"wp-block-heading\">Why Docker Containers Fail with Memory Errors on Shared Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When a container exceeds its memory limit, the Linux kernel&#8217;s OOM (out-of-memory) killer terminates it \u2014 Docker reports this as exit code 137, and `<code>docker inspect --format='{{.State.OOMKilled}}'<\/code>` on the container confirms it. On a normal server, you&#8217;d raise the container&#8217;s memory limit or add RAM. On shared hosting, that option is often unavailable or already capped by the hosting account tier itself \u2014 the account has a fixed memory ceiling regardless of what a single container needs, and that ceiling exists precisely because dozens of other accounts share the same physical RAM.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check whether a container was actually OOM-killed with `<code>docker inspect --format='{{.State.OOMKilled}}' &lt;container><\/code>` \u2014 exit code 137 alone can also mean a manual kill or an external timeout.<\/li>\n\n\n\n<li>Run `<code>docker stats<\/code>` to see live memory usage against the container&#8217;s limit before it fails.<\/li>\n\n\n\n<li>Check kernel-level OOM events with `<code>dmesg | grep -i oom<\/code>` \u2014 a host-level OOM kill (not just a container-level one) is a strong sign the shared account&#8217;s overall RAM ceiling, not just Docker&#8217;s own settings, is the real constraint.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"h-why-upgrading-your-shared-hosting-plan-doesn-t-fix-slow-load-times\" class=\"wp-block-heading\">Why Upgrading Your Shared Hosting Plan Doesn&#8217;t Fix Slow Load Times<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A higher shared-hosting tier typically raises your quota on the shared resource pool \u2014 more allowed CPU seconds, a bit more RAM headroom \u2014 but the pool itself is still shared with every other account on that physical server. If the server is busy, your <a href=\"https:\/\/contabo.com\/en\/vps-performance\/\">&#8220;higher-tier&#8221; <\/a>account still competes for the same underlying cores and memory bandwidth as everyone else&#8217;s account. This is why a plan upgrade often produces no visible improvement: the bottleneck was never your quota, it was contention for a resource nobody on shared hosting fully controls.<\/p>\n\n\n\n<style>\n.shm-compare-wrap{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;color:#333;line-height:1.6;max-width:780px;margin:0 auto}\ntable.shm-compare{width:100%;border-collapse:separate;border-spacing:0;border-radius:10px;overflow:hidden;box-shadow:0 1px 6px rgba(0,0,0,.08)}\ntable.shm-compare caption{caption-side:top;text-align:left;font-size:1.5rem;font-weight:700;color:#365F91;padding:0 0 .7em;font-family:inherit}\ntable.shm-compare th{background:#365F91;color:#fff;text-align:left;padding:.85em 1.1em;font-weight:600;font-size:.98rem}\ntable.shm-compare th:first-child{background:#2C4E78}\ntable.shm-compare td{padding:.85em 1.1em;border-bottom:1px solid #E3E7ED;font-size:.96rem}\ntable.shm-compare td:first-child{font-weight:600;color:#365F91;background:#F4F7FB;width:26%}\ntable.shm-compare tbody tr:last-child td{border-bottom:none}\ntable.shm-compare tbody tr:nth-child(even) td:not(:first-child){background:#FAFBFD}\n@media (max-width:600px){table.shm-compare, table.shm-compare thead, table.shm-compare tbody, table.shm-compare th, table.shm-compare td, table.shm-compare tr{display:block}\ntable.shm-compare thead tr{display:none}\ntable.shm-compare caption{padding-bottom:.5em}\ntable.shm-compare td:first-child{width:auto;border-bottom:none;padding-bottom:.2em}\ntable.shm-compare tr{margin-bottom:1em;border:1px solid #E3E7ED;border-radius:8px;overflow:hidden}\ntable.shm-compare td:not(:first-child)::before{content:attr(data-label) \": \";font-weight:600;color:#4F81BD}}\n<\/style>\n\n<div class=\"shm-compare-wrap\">\n  <table class=\"shm-compare\">\n    <caption>Shared Hosting vs VPS: Where the Resources Actually Come From<\/caption>\n    <thead>\n      <tr><th><\/th><th>Shared hosting<\/th><th>VPS<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Resource allocation<\/td>\n        <td data-label=\"Shared hosting\">Pooled across all accounts on the server<\/td>\n        <td data-label=\"VPS\">Allocated to your instance specifically<\/td>\n      <\/tr>\n      <tr>\n        <td>Performance under contention<\/td>\n        <td data-label=\"Shared hosting\">Can degrade when other accounts are busy<\/td>\n        <td data-label=\"VPS\">Isolated from other customers&#8217; load<\/td>\n      <\/tr>\n      <tr>\n        <td>Docker support<\/td>\n        <td data-label=\"Shared hosting\">Often restricted or unavailable<\/td>\n        <td data-label=\"VPS\">Full support \u2014 root access, run any container stack<\/td>\n      <\/tr>\n      <tr>\n        <td>Upgrading fixes contention?<\/td>\n        <td data-label=\"Shared hosting\">No \u2014 raises your quota on the same shared pool<\/td>\n        <td data-label=\"VPS\">Yes \u2014 more dedicated resources, not a bigger slice of a shared one<\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">For more <a href=\"https:\/\/contabo.com\/blog\/cloud-hosting-vs-vps-hosting-features-benefits-and-differences-explained\/\">detailed comparison between Cloud hosting and VPS hosting<\/a><\/p>\n\n\n\n<h2 id=\"h-moving-docker-workloads-to-a-vps\" class=\"wp-block-heading\">Moving Docker Workloads to a VPS<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Estimate your container stack&#8217;s real memory needs using `docker stats` on your current setup as a baseline, then add headroom \u2014 30-50% is a reasonable starting buffer.<\/li>\n\n\n\n<li>Pick a <a href=\"https:\/\/contabo.com\/en\/vps\/\">VPS<\/a> plan sized to that estimate plus growth room, not just your current footprint.<\/li>\n\n\n\n<li>Install Docker and Docker Compose on the new VPS, and migrate your compose files and volumes over.<\/li>\n\n\n\n<li>Set explicit memory limits per container (`<code>mem_limit<\/code>` in Docker Compose) even on a VPS \u2014 this prevents one container from starving the others, the same noisy-neighbor problem shared hosting has, just now fully within your control.<\/li>\n\n\n\n<li>Monitor with `docker stats` after migration to confirm the new limits are appropriate before decommissioning the old shared hosting account.<\/li>\n<\/ol>\n\n\n\n<h2 id=\"h-why-contabo-is-built-for-resource-heavy-workloads\" class=\"wp-block-heading\">Why Contabo Is Built for Resource-Heavy Workloads<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Contabo&#8217;s <a href=\"https:\/\/contabo.com\/en\/vps\/\">Core VPS line<\/a> gives Docker workloads dedicated RAM and CPU allocation from the start \u2014 the Cloud VPS 8 plan&#8217;s 24 GB RAM at roughly \u20ac14\/month, for example, is resource capacity that&#8217;s genuinely yours, not a quota on a pool shared with other customers. For workloads that have outgrown even a generous VPS, the <a href=\"https:\/\/contabo.com\/en\/vps-dedicated\/\">VDS <\/a>line adds dedicated physical cores on top, removing the shared-CPU variable entirely.<\/p>\n\n\n\n<h2 id=\"h-faq-shared-hosting-resource-limits\" class=\"wp-block-heading\">FAQ: Shared Hosting Resource Limits<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1784638161381\"><strong class=\"schema-faq-question\">Why does Docker say out of memory on shared hosting?<\/strong> <p class=\"schema-faq-answer\">Most shared hosting plans either restrict Docker entirely or cap the account&#8217;s total memory well below what a multi-container stack needs, since the underlying RAM is shared across every account on the server. The OOM killer terminates the container when it hits that ceiling \u2014 raising the container&#8217;s own memory limit doesn&#8217;t help if the hosting account&#8217;s total allocation is the actual constraint.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1784638176641\"><strong class=\"schema-faq-question\">Why is my website still slow after upgrading my shared hosting plan?<\/strong> <p class=\"schema-faq-answer\">A shared hosting upgrade usually increases your quota on a resource pool that&#8217;s still shared with other accounts on the same server \u2014 it doesn&#8217;t guarantee you isolated CPU or RAM. If the server is under load from other tenants, your site can stay slow regardless of which tier you&#8217;re on. Moving to a VPS, where resources are allocated to your instance specifically, removes that shared-contention variable.<\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Why does shared hosting keep hitting memory limits, even after you upgrade? Shared hosting pools CPU and RAM across every account on the same physical server. A plan upgrade within shared hosting usually buys you a higher quota on that shared pool, not a guaranteed, isolated allocation \u2014 so Docker containers still get OOM-killed and [&hellip;]<\/p>\n","protected":false},"author":78,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[4706],"tags":[],"ppma_author":[4285],"class_list":["post-32213","post","type-post","status-publish","format-standard","hentry","category-explainer"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Jie Guo","author_link":"https:\/\/contabo.com\/blog\/author\/jieguo\/"},"uagb_comment_info":0,"uagb_excerpt":"Why does shared hosting keep hitting memory limits, even after you upgrade? Shared hosting pools CPU and RAM across every account on the same physical server. A plan upgrade within shared hosting usually buys you a higher quota on that shared pool, not a guaranteed, isolated allocation \u2014 so Docker containers still get OOM-killed and&hellip;","authors":[{"term_id":4285,"user_id":78,"is_guest":0,"slug":"jieguo","display_name":"Jie Guo","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/4e0d981b06988d6d456834e9d55bc9e713e918fa8444325543d14f448154106b?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Guo","first_name":"Jie","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/posts\/32213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/comments?post=32213"}],"version-history":[{"count":2,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/posts\/32213\/revisions"}],"predecessor-version":[{"id":32245,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/posts\/32213\/revisions\/32245"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/media?parent=32213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/categories?post=32213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/tags?post=32213"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=32213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}