How Much Hosting Do You Really Need? (CPU, RAM, Storage)
If you’ve ever stared at hosting plans wondering whether 1 vCPU and 2 GB RAM will cut it—or if you actually need 8 vCPU, NVMe storage, and a CDN—this guide is for you. We’ll translate hosting requirements into plain English, show you how to choose hosting resources based on your site type and traffic, and give you rules of thumb that actually hold up in production.
We’ll cover CPU, RAM, bandwidth, and storage for real-world stacks (WordPress blogs, WooCommerce stores, and custom apps). You’ll learn how to size for today, keep headroom for tomorrow, and avoid overpaying on day one.
Understanding Resource Needs
Before we talk numbers, it helps to understand what actually drives resource usage. Your ideal hosting configuration depends on:
- Stack and workload: Static pages vs dynamic pages, PHP vs Node/Python, SSR vs client-side.
- Caching strategy: Full-page caching, object cache (e.g., Redis), CDN offload.
- Concurrency: How many requests hit the server at the same time.
- Database load: Reads vs writes, indexes, search, reporting, and the size of the hot working set.
- Media footprint: Images, downloads, video (and whether you offload them).
- Traffic pattern: Consistent vs spiky (e.g., campaigns, sales, launches).
- Features: Logged-in users, carts, payments, background jobs, WebSockets, search indexing.
- Reliability targets: Backups, failover, staging environments, and monitoring.
A few high-impact principles:
- Cache first, then scale: A well-cached site on modest hardware outperforms an uncached site on beefy hardware.
- Size for peak, not average: Traffic is spiky. Plan headroom for 3–5× your average hour.
- Leave 30–40% headroom: Keep some CPU and RAM free so your server doesn’t fall over under spikes or scheduled tasks.
- Separate concerns when needed: Moving your database or cache to its own instance can stabilize performance at higher loads.
- Measure, don’t guess: Metrics and profiling (requests per second, CPU steal, memory usage, slow queries) save money and headaches.
Choosing a hosting type
- Shared hosting: Cheapest, resource-shared. Good for small static sites or low-traffic blogs with caching. Limited control and noisy neighbors.
- VPS: Dedicated slice of CPU/RAM. Excellent balance of control and cost. Great for most small/medium sites.
- Cloud instances: Like VPS but with easier scaling, snapshots, block/object storage, and managed services.
- Dedicated/bare metal: High-performance, predictable. Great for heavy apps or databases at scale.
- Managed platforms (e.g., managed WordPress): Less ops work, optimized stacks, often pricier but worth it for many teams.
What’s the goal? Pick the smallest, well-tuned setup that meets your peak load with headroom, is easy to monitor, and won’t punish you for growth.
RAM, CPU, Bandwidth Explained
Let’s decode the big four: CPU, RAM, storage, and bandwidth/transfer.
CPU (vCPU vs core)
- vCPU is a virtual CPU. One vCPU is roughly one thread on a physical core. Not all vCPUs are equal—provider generations differ.
- CPU-bound tasks: Dynamic page generation, SSR (Next.js/Nuxt), image processing, compression, encryption, and application logic.
- Rules of thumb:
- WordPress/PHP page generation (uncached): 1 vCPU can often handle 5–15 dynamic requests per second (RPS), depending on plugins/theme/database.
- With full-page caching: NGINX can push hundreds to thousands of cached RPS on even modest instances.
- Node SSR (Next.js/Nest): Expect 1–5 SSR RPS per vCPU, depending on complexity and data fetching. Scale horizontally with clustering.
- Signs you need more CPU: High load averages, long TTFB during peaks, rising queue/wait times, high CPU steal on shared/cloud instances.
RAM (memory)
- RAM is what your OS, web server, runtime, and database use to keep things fast. Disk is slow. Swap is a last resort.
- Typical memory footprints:
- Linux + NGINX + basic PHP-FPM: ~300–600 MB baseline.
- Each PHP-FPM worker: 40–120 MB for a typical WordPress blog; WooCommerce or heavy plugins can push 150–250 MB per worker.
- MySQL/MariaDB: 512 MB for “toy,” 1–4 GB for small/medium sites, 8+ GB for heavier e-commerce or reporting. InnoDB buffer pool should roughly match your hot data.
- Node app: 150–500 MB per process, more if SSR, image work, or large dependencies.
- Redis: Memory equals your cache size + overhead. Start with 256 MB–1 GB.
- How much RAM needed for a website?
- Small blog (10k visits/month): 1–2 GB RAM, if caching is on point.
- Medium WordPress (50–100k visits/month): 2–4 GB RAM with caching; 4–8 GB if WooCommerce or many plugins.
- Node/Django apps: 2–8 GB for app + DB on one box; separate DB once traffic grows.
- Signs you need more RAM: Swapping, OOM kills, PHP/Node workers restarting, database page cache hit ratio dropping, slow queries.
Storage (disk)
- Your storage must handle capacity and speed (IOPS/throughput). NVMe SSDs are ideal.
- Hosting storage requirements to consider:
- OS + stack: ~3–8 GB (Linux + NGINX + PHP/MySQL basics).
- App files + themes/plugins: Few hundred MBs to a few GBs.
- Media library: Often the biggest piece. Plan growth!
- Database: Small blogs: 50–500 MB. Medium stores: 1–10 GB+. Logs and backups add more.
- Logs + backups: Logs can grow quickly. Keep rotation short and send backups off-server.
- Strategy:
- Start with 40–80 GB for small/medium sites. 160 GB+ if you store lots of media locally.
- Use object storage (S3-compatible) for big media. It’s cheap, durable, and CDN-friendly.
- Use block storage for databases when you need IOPS and consistent latency.
Bandwidth vs network speed
- Bandwidth/transfer: How much data you move per month (e.g., 1 TB transfer).
- Network speed: How fast your pipe is (e.g., 1 Gbps). This affects concurrency and burst ability.
- Estimate monthly transfer:
- Monthly page views × average page weight (in MB) ≈ monthly GB.
- Example: 100,000 page views × 2 MB = 200,000 MB ≈ 195 GB/month.
- Reduce transfer with:
- CDN for static assets and cached HTML.
- Image optimization (WebP/AVIF), compression, lazy loading.
- Don’t self-host video; use a streaming platform/CDN.
Expected Traffic vs Server Load
Traffic isn’t evenly distributed. A day’s worth of visits may pile into a few hours, and a big chunk into a few minutes. That’s where concurrency matters.
Key ideas
- Requests per second (RPS): How many requests the server processes each second. This is the pressure your app feels.
- Concurrency: Requests in progress at the same time. Concurrency ≈ RPS × average response time.
- Peak vs average: Plan for peak hour traffic. A rule of thumb: peak hour can be 5× your daily average hour.
- Cached vs dynamic:
- Cached pages are served by NGINX/CDN and are extremely cheap (tiny CPU/RAM).
- Dynamic pages (e.g., logged-in users, carts, checkout) require app and DB work. They are expensive.
A simple sizing approach
- Estimate page views and peak hour
- Monthly visits × pages per visit = monthly page views.
- Daily views ≈ monthly views / 30.
- Peak hour ≈ daily views / 8 (if day is spiky) or ×5 of your average hour.
- Decide what percent will be cached vs dynamic
- Blogs: 90–99% can be cached.
- WooCommerce: Home/category/product pages cached; cart/checkout/account not. 60–80% cached.
- Apps: Often less cacheable; depends on SSR strategy and API behavior.
- Estimate RPS and concurrency
- Peak requests per second = peak hour views × (requests per page) / 3600.
- If a page pulls 10 resources that are CDN-cached, the origin sees fewer hits. With good CDN, origin often handles only HTML + APIs.
- Concurrency = RPS × average processing time (seconds). If dynamic pages take 0.5 seconds, and you see 10 dynamic RPS, concurrency ≈ 5.
- Map to CPU/RAM
- For dynamic PHP (uncached WP), expect 5–15 RPS per vCPU.
- For Node SSR, 1–5 RPS per vCPU.
- For cached pages, your bottleneck is more likely network/bandwidth than CPU.
Example: 100k visits/month WordPress blog
- Pages/visit: 2 → 200k page views/month → ~6,667/day.
- Peak hour: ≈ 1,000–2,000 views.
- With 95% cache hit (CDN + full-page cache), origin handles ~50–100 HTML requests in peak hour ≈ 0.02–0.03 RPS dynamic. Trivial.
- A 1 vCPU, 1–2 GB RAM VPS with CDN can handle this comfortably.
Example: 50k visits/month WooCommerce
- Pages/visit: 3 → 150k page views/month → ~5,000/day.
- Assume 70% cacheable → 1,500 uncached/dynamic pages per day.
- Peak hour ~250 dynamic pages → ~0.07 dynamic RPS on average, but traffic isn’t smooth. Expect short bursts (cart/checkout).
- Sizing: 2 vCPU, 4 GB RAM minimum; 4 vCPU, 8 GB RAM recommended for promo days. Redis object cache helps a ton. Separate DB as you grow.
Example: Next.js SSR app, 200k page views/month
- CDN caches static assets; SSR HTML is often dynamic.
- Peak hour might be 3–5k SSR requests. At 2 vCPU and 2 RPS/vCPU, you’ll need multiple instances or use ISR/caching to cut SSR load.
- Sizing: Start with 2–4 vCPU, 4–8 GB per instance, enable ISR/static generation where possible, scale horizontally behind a load balancer.
How optimization changes everything
- Full-page caching: For blogs, 90%+ of origin hits vanish. CPU requirement plummets.
- Object caching (Redis): Cuts repeated DB queries and slashes TTFB on dynamic pages.
- Database indexing: A single missing index can turn 1 vCPU into 100% CPU while responses crawl.
- Image offload + CDN: Frees disk and bandwidth; origin serves mostly HTML/API.
- Swap is not performance: It’s a crash cushion. If you’re swapping regularly, you need more RAM.
Signals you’re under-provisioned
- CPU constantly >70% during peak hours or high CPU steal.
- Memory usage near 100%, swap usage increasing.
- TTFB spikes during traffic bursts.
- High 5xx errors under load.
- Slow query logs show heavy or frequent long-running DB queries.
Hosting for Blogs vs Shops vs Apps
Different site types have different hosting requirements. Here’s how to choose hosting resources for each.
Blogs (WordPress or similar CMS)
Profile:
- Mostly anonymous traffic, highly cacheable content.
- Spikes when posts go viral.
- Heavy media use (images) but static-CDN-friendly.
Starter sizing:
- Up to 10k visits/month: 1 vCPU, 1–2 GB RAM, 40 GB SSD, CDN, full-page cache plugin, object cache optional.
- 10–50k: 2 vCPU, 2–4 GB RAM, 60–80 GB SSD, Redis object cache, CDN required.
- 50–200k: 2–4 vCPU, 4–8 GB RAM, 80–160 GB SSD, offload media to object storage; consider separate DB if you run many plugins.
Storage and bandwidth:
- Media will dominate storage. Plan 1–5 GB/year for image-heavy blogs unless aggressively optimized.
- Use WebP/AVIF and a CDN. Don’t self-host videos; embed from a streaming platform.
Optimizations:
- Full-page caching (e.g., NGINX fastcgi cache or a managed plugin).
- Image compression, lazy load, responsive sizes.
- Keep plugins lean; audit slow or duplicate functionality.
- Enable PHP OPcache; keep PHP, CMS, and plugins updated.
Shops (WooCommerce, Magento, PrestaShop)
Profile:
- Logged-in sessions, carts, and checkout aren’t cacheable.
- Spiky load during promotions and seasonal peaks.
- More write-heavy DB usage (orders, inventory, coupons).
Starter sizing:
- Small shop, up to 10k visits/month: 2 vCPU, 4 GB RAM, 60–80 GB SSD. CDN for assets. Redis object cache strongly recommended.
- 10–50k: 4 vCPU, 8 GB RAM, 80–160 GB SSD. Consider separate DB server if concurrency grows; use Redis for sessions and object cache.
- 50–200k: 4–8 vCPU, 8–16 GB RAM, 160–320 GB SSD. Separate DB + Redis, possibly a read replica. Consider horizontal scaling for big promos.
Database notes:
- InnoDB buffer pool: Keep it large enough to fit your hot data and indexes (start with 2–8 GB; go higher as data grows).
- Optimize slow queries and add missing indexes (especially for product/catalog tables, order queries, and search).
- Consider specialized search (Elasticsearch/OpenSearch) for large catalogs.
Other tips:
- Disable full-page caching for cart/checkout/account. Do cache product/category pages.
- Turn on HTTP/2 or HTTP/3 and TLS session reuse for faster asset delivery.
- Rate-limit abusive bots and block bad crawlers—they can eat CPU and bandwidth for nothing.
Apps (APIs, SSR/SPA backends, dashboards, SaaS)
Profile:
- Logic-heavy backends with frequent database or API calls.
- Often less cacheable. SSR can be CPU-intensive.
- Background tasks, queues, and cron jobs are common.
Starter sizing:
- Early-stage app: 2 vCPU, 4 GB RAM per instance, autoscaling if possible. 40–80 GB disk. Managed DB if budget allows.
- Growing app: 4 vCPU, 8 GB RAM per instance; separate DB (4–8 vCPU, 8–16 GB RAM), Redis for cache/session, queue workers (1–2 vCPU each).
- Heavy read/write: DB with high IOPS storage (NVMe/block), larger buffer pool (16–64 GB), replicas for read scaling.
Key components:
- Cache layers: Edge/CDN for static, application-level caching for computed results, Redis for session/state.
- Job queues: Offload slow work (emails, image/video processing, webhooks).
- Horizontal scale: Run multiple app instances behind a load balancer; use sticky sessions or externalize session storage.
- Observability: Metrics, logs, tracing. You can’t scale what you can’t see.
How much RAM needed for a website? Quick cheat sheet
- Simple static site: 512 MB–1 GB (on a tiny VPS); or use a static host + CDN.
- Small WordPress blog: 1–2 GB.
- Medium WordPress or small WooCommerce: 2–4 GB.
- Busy WooCommerce: 4–8 GB.
- Node SSR app: 4–8 GB per instance for comfortable headroom.
- Database on the same box? Add 1–4 GB to the above minimums. On separate DB? Size the DB generously (start 4–8 GB).
Choosing storage like a pro
- Start with 40–80 GB SSD/NVMe for OS + app + modest media.
- If you publish lots of images/files, use object storage for media and only keep core files on the server.
- Logs: Rotate aggressively to avoid surprise disk fills.
- Backups: Off-site, automated, and tested. Don’t store many copies on the same disk you’re backing up.
Bandwidth tips
- Estimate transfer as page_views × page_weight. Target sub-2 MB pages; 1 MB is better.
- Offload as much as possible to the CDN. The origin should serve mostly HTML/API, not images/videos.
Putting it together: sensible resource tiers
Budget, beginner-friendly (good defaults with caching):
- Blogs up to 50k visits/month: 2 vCPU, 2–4 GB RAM, 60 GB SSD, CDN, full-page cache, Redis optional.
- Shops up to 20k visits/month: 2–4 vCPU, 4–8 GB RAM, 80 GB SSD, CDN for assets, Redis required.
- Apps, early-stage: 2–4 vCPU, 4–8 GB RAM, 60–80 GB SSD, managed DB if possible, Redis, S3/object storage for files.
Growth tier:
- Blogs 50–200k: 2–4 vCPU, 4–8 GB RAM, 80–160 GB SSD, object storage for media, Redis, separate DB optional.
- Shops 20–100k: 4–8 vCPU, 8–16 GB RAM, 160–320 GB SSD, separate DB (4–8 vCPU, 8–16 GB), Redis, search service if catalog is large.
- Apps: 4 vCPU, 8 GB RAM per instance, 2–3 instances behind LB, DB 4–8 vCPU/16 GB RAM with NVMe, Redis, workers.
Scale tier:
- Blogs 200k+: 4–8 vCPU, 8–16 GB RAM, load balancer + multiple web nodes, DB on its own instance, object storage, CDN, Redis.
- Shops 100k+: Same pattern; pay special attention to DB size and IOPS, Redis for sessions/object cache, autoscale on peak events.
- Apps: Multiple app nodes, sharded or replicated DB, job queues, observability, autoscaling, and possibly regional edge rendering.
Practical Q&A and gotchas
- Do I need swap? Yes, a small swap (1–2 GB) as a safety net. But if you’re using swap regularly, you need more RAM.
- vCPU vs core count confusion: Treat 2 vCPU ~ 1 physical core with hyperthreading (very rough). Capacity depends on provider and generation.
- Can a CDN replace the server? No, but it can offload 70–99% of traffic for cacheable content. Still need the origin for cache misses and dynamic work.
- When to separate DB? When your app CPU is fine but queries slow; when RAM limits your InnoDB buffer pool; or when backups/maintenance on one box disrupt everything.
- Why is my site slow on big hardware? Often a query/indexing issue, slow external API calls, or uncached pages—optimize before scaling up.
SEO lens: matching resources to search intent
- Faster TTFB improves Core Web Vitals and conversions. The cheapest performance wins are caching, CDN, and image optimization.
- Don’t obsess over raw CPU if you’re serving cached pages. Work on page weight and caching to deliver quicker real-world performance.
Cost-aware scaling strategy
- Start small but sane: Enough RAM to avoid swapping, enough CPU to handle uncached bursts.
- Add CDN, Redis, and image optimization early.
- Split the DB when growth warrants it. It’s easier to scale app servers than a neglected database.
- Monitor everything: CPU, RAM, disk, I/O wait, network, slow queries, cache hit rates.
- Keep 30–40% idle resources during peak. That’s your safety margin.
Example sizing walkthroughs
- New content site expecting 50k visits in 3 months
- Start: 2 vCPU, 2–4 GB RAM, 60 GB SSD, CDN, full-page cache. Object storage optional.
- Expectation: With 95% cache hit, origin load is tiny. Growth will be smooth until a true viral event.
- Upgrade path: Move to 4 vCPU, 4–8 GB RAM if dynamic features grow (memberships, comments, search).
- WooCommerce store with 5k products, 20k visits/month, occasional promo days
- Start: 4 vCPU, 8 GB RAM, 80–160 GB SSD, Redis for sessions/object cache, CDN for assets.
- Database: 4 vCPU, 8–16 GB RAM (if separate). Tune indexes on product, order, and search tables. Consider external search for large catalogs.
- Promo plan: Temporarily scale to 8 vCPU web during big sales; ensure DB has room to breathe.
- SaaS app with SSR dashboard and API, 100k monthly page views
- App nodes: 2× (2–4 vCPU, 4–8 GB RAM), behind a load balancer.
- DB: 4–8 vCPU, 16 GB RAM, fast NVMe, frequent backups, slow query tuning.
- Redis: 1–2 GB memory for sessions and caching.
- Storage: Object storage for uploads; CDN for static files. Add a queue worker node for background jobs.
Common resource traps (and fixes)
- Trap: “I bought 8 vCPU but it’s still slow.” Fix: Profile slow queries; enable Redis; cache API calls; reduce N+1 queries; set reasonable PHP/Node worker counts.
- Trap: Disk fills overnight. Fix: Log rotation, offsite backups, and object storage for media. Alert on disk usage at 80%.
- Trap: High TTFB only for logged-in users. Fix: Cache what you can (fragments, APIs), reduce per-request DB calls, use object cache and session store.
- Trap: Bot/crawler overload. Fix: Rate-limiting, robots.txt, firewall rules, block bad user agents, tune crawl rate in search consoles.
Capacity planning checklist
- CPU: Do you have enough for dynamic bursts and background jobs? Keep peak <70% sustained.
- RAM: No swapping under normal load, DB cache hit ratio high, room for your app/runtime.
- Storage: NVMe SSD, enough space for OS + app + DB + logs + headroom; object storage for large media.
- Bandwidth: CDN enabled, images optimized; monthly transfer within plan limits.
- Caching: Full-page (where possible), Redis object/session cache, CDN; ISR/static generation for SSR frameworks.
- Database: Indexes tuned, slow queries fixed, buffer pool sized to hot data; backups tested.
- Monitoring: CPU/RAM/disk, logs, APM traces, error rates; alerts configured.
- Headroom: 30–40% free during peaks; clear path to scale (vertical or horizontal).
The bottom line
- Blogs: Cache hard, CDN everything, modest CPU/RAM go a long way.
- Shops: Plan for dynamic, logged-in traffic; invest in RAM/DB and Redis; handle peaks gracefully.
- Apps: Design for horizontal scale and caching layers; keep DB fast and observability strong.
If you remember one thing: sizing is not about guessing a number—it’s about combining caching, smart storage, and right-sized compute with monitoring, then scaling based on real data. Start lean, optimize early, keep headroom, and grow with confidence.