FindNChoose is reader-supported. Some links may earn us a commission at no cost to you; it never changes our verdicts. How we make money · How we test
What we measured
How we tested
We measured this WordPress site on our Hostinger KVM 4 VPS (4 vCPU, 16 GB RAM) on October 31, 2026, before launch, at its staging address. Stack: WordPress with the GeneratePress theme and a child theme, Rank Math SEO, Contact Form 7, Cache Enabler (page cache) and Redis Object Cache, on nginx, PHP 8.3 FPM, Percona MySQL 8.4 and Redis.
We read each PHP-FPM worker’s memory from Linux (/proc/<pid>/smaps_rollup), logged PHP’s peak memory and query count for real page requests with a temporary must-use plugin, and ran ApacheBench on the same server at five concurrent connections: 500 cached and 200 uncached homepage requests.
| Measurement | Result |
|---|---|
| PHP-FPM worker, resident memory (RSS) | 64 to 72 MB each, 65 MB average |
| PHP-FPM worker, proportional share (PSS) | 15 MB average |
| PHP-FPM worker, private memory | 7 MB average |
| PHP peak memory per page request | 4 to 6 MB |
| Uncached page render time | 27 to 65 ms |
| MySQL queries per page (Redis warm) | 0 to 8 |
| Redis, whole server | 14 MB resident |
| MySQL, whole server | 973 MB resident, 512 MB InnoDB buffer pool |
| Cached homepage | 678 requests/s, 7 ms median |
| Uncached homepage | 71 requests/s, 65 ms median |
Hostinger KVM 4, Boston, October 31, 2026. MySQL and Redis serve every site on this server, not just WordPress.
Why RSS overstates PHP memory
If you run top on a WordPress server, each PHP-FPM process shows 60 to 100 MB. Multiply by 20 workers and it looks like WordPress needs 2 GB for PHP alone. It does not.
Most of that resident memory is shared: PHP’s own code and the OPcache, which holds compiled WordPress, theme and plugin code once for every worker. The proportional set size (PSS) splits shared memory fairly between processes. On our server, the real per-worker cost was about 15 MB, of which 7 MB was strictly private. Six workers used 93 MB in total, not 390 MB.
A heavier site uses more: WooCommerce, page builders and large plugin stacks can push PHP’s peak per request from our 4 to 6 MB to tens of megabytes. Our 65 MB RSS figure is a safe ceiling for a lean site; budget 100 MB or more per worker for heavy ones.
Where the RAM actually goes
- The operating system and services: about 300 to 500 MB for Linux, nginx, SSH and monitoring on a small server.
- The database: MySQL reserves its InnoDB buffer pool up front. On a 2 GB server, 256 MB is plenty for a few sites; our server uses 512 MB for several. Our WordPress database itself is about 1 MB at launch.
- PHP-FPM workers: 15 to 100+ MB each depending on plugins, times the number running at your busiest moment.
- Object cache: Redis is tiny for a small site. Ours held 113 keys and the whole server’s Redis used 14 MB.
- File cache: Linux uses spare RAM to cache files, including cached HTML pages. This is good, not wasted memory.
Caching changes everything
A page served from Cache Enabler’s file cache took 7 ms and did not need a full WordPress load. A full render took about 65 ms. That is roughly ten times more work per uncached request, and it is why a cached site needs so few PHP workers: most visitors never reach PHP.
With Redis Object Cache warm, our homepage made zero MySQL queries. Object caching does not save much RAM, but it takes load off the database during uncached requests and in the admin.
How much RAM to plan for
| Your setup | RAM to start with |
|---|---|
| 1 to 2 cached sites, light plugins | 2 GB |
| 3 to 10 cached sites | 4 GB |
| 10 to 20 cached sites | 4 to 8 GB |
| WooCommerce or membership site | 4 GB, more for large catalogs or busy stores |
| Page builder sites with many plugins | Add 50% to the numbers above |
The VPS sizing calculator uses these measurements to estimate RAM and CPU from your traffic and number of sites, and shows the plans that fit.
Tuning tips from our setup
- Use an on-demand PHP-FPM pool for small sites. Our pool starts workers when requests arrive and stops them after 10 seconds idle, so an idle site uses no PHP memory at all.
- Cap workers per site on small servers. The ceiling (
pm.max_children) should be what your RAM can hold: free memory divided by per-worker memory. - Enable OPcache (on by default in modern PHP). It is the reason workers share most of their memory.
- Size the database buffer pool to your data, not your RAM. A few hundred MB covers most small WordPress sites.
- Add swap as a safety net. Our server has 2 GB of swap and was using 1 MB of it.
How to check RAM use on your own server
You can repeat our measurements on any Linux VPS:
free -mshows total, used and available memory. Look at available, not free: Linux uses spare RAM for file cache and gives it back when needed.ps -C php-fpm8.3 -o pid,rss,cmdlists PHP-FPM workers and their resident memory (adjust the process name to your PHP version).grep -E '^(Rss|Pss)' /proc/PID/smaps_rollupshows a worker’s real proportional share, which is what you should multiply by the number of workers.- Your PHP-FPM pool file shows the process manager mode and
pm.max_children, the ceiling on workers. - In MySQL,
SELECT @@innodb_buffer_pool_size/1048576;shows the buffer pool in MB.
Measure at a busy time of day. If available memory stays above about 20% of the total and swap use is near zero, you have enough RAM.
Does shared hosting give you enough RAM?
Shared plans often advertise memory limits per account. For cached content sites, they are usually enough. The bigger limit on shared hosting is CPU time for uncached requests; see shared hosting vs VPS.
For a single small cached site, it can work, but it leaves little room for the database and updates. 2 GB is a safer minimum for a VPS. On our lean WordPress site, about 65 MB resident but only about 15 MB of its own (PSS), because code is shared through OPcache. Heavy plugin stacks can need 100 MB or more per worker. It is the maximum memory a single PHP request may use, not what it normally uses. Our pages peaked at 4 to 6 MB even though the limit was much higher. Yes. Cart, checkout and account pages cannot be served from the page cache, so more PHP workers run at once, and each uses more memory. Start with 4 GB on a VPS.Frequently asked questions
Is 1 GB of RAM enough for WordPress?
How much RAM does a PHP-FPM worker use?
What is the WordPress memory_limit setting?
Does WooCommerce need more RAM?
Sources