Shared hosting limitations: what you can and cannot do (India guide)
8 min read · 15-Sept-2024
villagehosting.in team
15 September 2024
Shared hosting is cheap and fine for small sites — until it is not. Here are the actual resource limits you will hit before you realise shared hosting is the bottleneck, so you can plan accordingly.
What shared hosting actually is
On shared hosting, your website files sit on a physical server alongside hundreds or thousands of other websites. You share the CPU, RAM, and disk I/O with everyone on that machine. The hosting company uses software limits to prevent any one account from using too much.
SHARED HOSTING
VPS HOSTING
These limits are called resource limits or quotas, and they vary by provider. But the categories are consistent.
How to check your current usage
In cPanel, go to the top-right corner where your account stats are shown — disk usage, inodes, CPU, and memory usage are all visible. Check these before you hit a wall.
Inodes (file count limit)
An inode represents one file or folder. Shared hosting plans typically limit inode counts:
- Basic plan: 100,000–250,000 inodes
- Pro plan: 500,000–1,000,000 inodes
Why this matters: A fresh WordPress installation uses about 2,000 inodes. Add WooCommerce, 5 plugins, 500 products, and their generated image sizes — you're at 30,000–50,000 inodes. A 3-year-old site with revisions, backups, and uploaded files can hit 200,000+ inodes.
When you hit the limit: New files fail silently. WordPress updates fail. Backups stop working. You get no clear error message — files just don't get created.
Check your inode usage: cPanel → Files → Disk Usage → look for "Inodes" in the summary.
Memory (RAM) limit per process
Shared hosting PHP processes are usually limited to 256 MB or 512 MB of RAM.
WordPress on a clean installation: ~64–128 MB WordPress with WooCommerce + 10 plugins: ~128–256 MB WordPress import or WooCommerce bulk export: can spike to 512 MB+
When you hit the memory limit, you get 500 Internal Server Error or a blank white screen. The PHP process is killed mid-request.
Temporary fix: Increase memory_limit in php.ini or .htaccess:
php_value memory_limit 512M
Some hosts allow this; others cap it at 256 MB regardless. If you're regularly hitting 256 MB, shared hosting is too small for your site.
CPU time limit
Shared hosting has per-process CPU time limits (typically 30–120 seconds). Long-running PHP scripts — database migrations, import/export tasks, bulk operations — are killed before they finish.
Symptoms: WooCommerce exports fail after a few hundred rows. WordPress plugin bulk-update stalls. Scheduled WP-Cron tasks time out.
On VPS/dedicated: No per-process CPU time limit. Scripts run as long as needed.
Concurrent connections
Shared hosting typically limits the number of simultaneous PHP processes per account (4–25 connections). During traffic spikes, additional requests queue up and eventually return 503 (Service Unavailable).
This is the limit you hit first during a viral moment or a sudden traffic spike from social media.
Port access
On shared hosting, you can only bind to specific ports:
- 80 (HTTP), 443 (HTTPS) — via your web server
- 21 (FTP), 22 (SFTP)
You cannot:
- Run a custom port for a Node.js, Python, or Go application
- Open ports for game servers, VPN, or custom TCP services
- Run WebSocket servers on non-standard ports
VPS and above have no port restrictions (except what you explicitly configure in your firewall).
Cron job frequency
Shared hosting typically limits cron jobs to once every 15–60 minutes. You cannot run a task every minute.
Why this matters for WordPress: WP-Cron (WordPress's task scheduler) works correctly only if it runs frequently. On shared hosting, WP-Cron piggybacks on page visits — it only runs when someone loads a page. Low-traffic sites miss scheduled tasks entirely.
Workaround: Disable WP-Cron's automatic trigger and replace it with a server cron:
# Add to cPanel cron jobs (every 15 minutes)
*/15 * * * * wget -q -O /dev/null https://yourdomain.in/wp-cron.php?doing_wp_cron
On VPS, you can run this every minute.
Software installation restrictions
Shared hosting typically provides:
- PHP (cPanel lets you switch versions)
- MySQL
- Python (usually via CGI, not as a persistent process)
You cannot install or run:
- Node.js as a persistent process (some hosts offer Node.js via Phusion Passenger, but it's not universal)
- Redis or Memcached server (you can use object caching plugins with disk-based storage as a fallback)
- Custom binary software (compilers, custom binaries)
- Docker or containers
.htaccess restrictions
Most shared hosting respects .htaccess for URL rewrites, basic authentication, and redirects. Some directives are disabled at the server level:
Usually works:
RewriteRule,RewriteCondAuthType Basicphp_valuedirectives- Custom error pages
May not work (disabled by server config):
Options -Indexes— sometimes restrictedLimitRequestBody— sometimes restricted- Custom headers (
Header set) — requires mod_headers, not always enabled
SSH access
Some Indian shared hosts provide SSH access; others don't. Without SSH:
- You cannot run WP-CLI (command-line WordPress management)
- You cannot use Composer or npm
- You cannot run custom scripts
- You manage everything through cPanel or FTP
VPS always includes SSH access.
When to upgrade from shared hosting
| Signal | Action |
|---|---|
| Memory errors on plugin updates | Upgrade to VPS (2 GB RAM) |
| Inode limit at 80%+ | Audit files or upgrade |
| Page loads >5 seconds despite caching | Upgrade or review plugins |
| Cron tasks regularly failing | Upgrade or investigate |
| Need to run Node.js, Docker | Upgrade to VPS immediately |
| >1,000 daily active users | Upgrade to VPS |
| >500 WooCommerce orders/month | Upgrade to VPS |
The upgrade from shared hosting to a ₹1,199/mo VPS is often the most significant performance improvement an Indian small business website can make — and the management overhead is minimal with a managed VPS provider.