
Table of Contents
Pick shared hosting only if you serve under 500 daily visitors and cannot SSH; use a VPS when you need root, opcache tuning and predictable RAM for WooCommerce; move to cloud or managed Kubernetes once traffic bursts past 50 concurrent PHP workers. You did it right when ab -c 50 -n 1000 returns zero 5xx errors and your MySQL Innodb_buffer_pool_wait_free stays at 0 during a load test.
WordPress hosting comparison table
| Dimension | Shared | VPS | Cloud / Auto-scaling |
|---|---|---|---|
| Concurrency ceiling | ~10–20 PHP-FPM workers, capped by cPanel CloudLinux limits | You set pm.max_children, e.g. 40 on 4 GB RAM | Elastic pool, 100+ workers behind ALB |
| Memory per process | ~128 MB hard cap, memory_limit locked by host | Full control of php.ini, Redis object cache | Distributed cache (ElastiCache), stateless nodes |
| Latency to users | Single DC, no Anycast | Choose region; add CDN | Multi-region + edge |
| Compliance | Host handles basic logs | You own OS-level hardening and filings | IAM, audit logs, data residency options |
| Cost at 100k visits/mo | $15–$40 then throttled | $40–$80 flat | $90+ but auto-scales |
| Best fit | Brochure sites, blogs | WooCommerce, membership | Enterprise, spikes |
Use this table as the anchor of your WordPress hosting comparison: if your projected max_children exceeds 25, skip shared entirely.
Real limits of concurrency and memory
Shared hosts run CloudLinux with LVE limits; you hit a wall long before CPU does. To see it, run cat /proc/lve/info or check cPanel > Metrics > Resource Usage. When the account shows "Entry Processes" at 20/20, every new request queues and nginx returns 503. On a VPS you control the pool. Edit /etc/php/8.3/fpm/pool.d/www.conf (PHP 8.3 is the 2026 default on Ubuntu 24.04 LTS):
pm = dynamic
pm.max_children = 40
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 12
php_admin_value[memory_limit] = 256M
Why: each PHP worker eats ~30–60 MB with WooCommerce and object cache; 40 × 50 MB ≈ 2 GB, leaving room for MySQL and Redis. Verify with systemctl restart php8.3-fpm then ps --no-headers -o rss -C php-fpm8.3 | awk '{s+=$1} END {print s/1024 " MB used"}'. Pitfall: setting max_children too high triggers OOM-killer; roll back by halving the value and reloading. Pair this with a proper Custom WordPress Development engagement so the theme itself does not leak memory.
Get a Quote
Email + requirement + budget range — we reply with a quote within 24 hours.
Domestic vs overseas latency
If your audience is in mainland China, an overseas VPS adds 200–400 ms round trip and TCP resets. Measure with mtr -rw example.com from a local box and compare against a domestic node. The fix on any tier is edge caching; see WordPress Behind a CDN: Cache, Origin, Purging for purge hooks. For overseas-only audiences, pick a region closest to users (us-east-1, eu-central-1, ap-southeast-1) and enable HTTP/3. Verify with curl -I https://example.com and look for cf-cache-status: HIT or your CDN’s equivalent. Pitfall: forgetting X-Forwarded-Proto makes WordPress redirect-loop; roll back by setting $_SERVER['HTTPS']='on' conditionally in wp-config.php.
Compliance and filings
In 2026 any site serving EU visitors needs GDPR records of processing and a lawful basis for the comment/IP data WordPress stores; China requires ICP filing for domestic servers. On shared hosting the provider often files on your behalf but you still need a privacy policy and consent for wp-comment cookies. On VPS you own the OS: run ufw allow 443/tcp && ufw enable, disable XML-RPC if unused, and log admin logins with a plugin that writes to /var/log/wp-audit.log. Cloud adds IAM: scope keys with least privilege and enable CloudTrail-equivalent audit. Verify by requesting your provider’s SOC 2 or ISO 27001 report and by running grep -r 'xmlrpc' wp-content to confirm no stray endpoints. Rollback if a compliance plugin breaks checkout: deactivate via wp plugin deactivate compliance-suite over SSH.
Cost curve as traffic grows
Shared looks cheap at $10/mo but throttles at ~30k visits; you then pay for "CPU upgrades" that cost more than a VPS. VPS is linear: $40/mo for 4 GB handles 100k visits if you offload media to S3 and use Redis. Cloud is exponential on egress: 1 TB out can add $90. Model it: visits × avg page size × 1.5 = GB egress. When WooCommerce order value per month exceeds the VPS bill by 50x, move to managed cloud. Track with vnstat -m monthly. Pitfall: auto-scaling without a budget alarm; set billing alerts at 80% of forecast and roll back by pinning min nodes to 2.
Step-by-step Process to size and migrate your host

- Benchmark current peak with
ab -c 20 -n 500 https://example.com/and record 99% latency. - Calculate workers needed:
peak_rps × avg_response_sec ÷ 0.8and round up. - Choose tier from the comparison table above and provision a staging clone.
- Tune
www.confand Redis, then replay the load test on staging. - Cut DNS TTL to 60 s and switch A records after a final
wp db export. - Monitor
mysqladmin statusfor 24 h; roll back DNS if slow queries exceed 2%.
Frequently asked questions
Is shared hosting ever OK for a small business site?
Yes, under 500 visits/day with caching and no ecommerce; beyond that the concurrency ceiling causes timeouts.
How do I know my VPS is undersized?
When free -m shows swap used during peak and pm.max_children is reached in php-fpm status, upgrade RAM or move to cloud.
Do I need ICP filing for a Hong Kong VPS?
No, HK and overseas nodes skip ICP, but latency to mainland users rises; use a CDN with China POPs instead.
Action checklist
- Run the load test and record
max_childrenreached. - Set
memory_limitand Redis object cache on VPS. - Verify CDN cache HIT ratio above 90%.
- Confirm compliance logs and firewall rules are active.
- Compare monthly egress cost before scaling.
Need hands-on help sizing, tuning and migrating? See our WordPress development services or browse the full technical index at https://runokwp.com/en/tech-articles/.
