How Many Visitors Can My Hosting Handle? Capacity Math Explained

How many visitors can my hosting handle?
How many visitors can my hosting handle depends on peak requests per second multiplied by how long each request takes, not on monthly visitor counts. A cached page can serve far more visitors than an uncached page on the same server. So there is no fixed number; there is a calculation you can run.
In this guide we build that calculation step by step. Our goal is not to hand you a magic figure. Instead, we want you to estimate capacity roughly but honestly with your own site data. Every number we use below carries an "example calculation" label, and you should replace it with values from your control panel, your analytics and your server logs.
We are Talha Aslan and team, a digital marketing and web team, not a hosting company. We run into this question often on website and e-commerce projects. That is why we base the technical details on official documentation and cite the sources in the text.
Why is "monthly visitors" a misleading number?
Monthly visitors is the total number of people who reach your site over a month. However, a server never handles a month. It handles the requests that arrive in the same second.
Picture two sites with 100,000 monthly visitors each. The first one gets steady traffic all month. The second one squeezes a large share of its traffic into a few hours after a single promotional email. Therefore, the second site needs much stronger infrastructure for the same monthly figure.
The word "visitor" also says nothing about workload. One visitor reads a single page and leaves. Another filters products, adds items to the cart and moves through checkout. That second visitor puts far more load on the server.
In short, the monthly figure is a traffic and budget metric, not a capacity metric. To understand capacity, you need answers to three questions:
- How many page views per second happen in the busiest minute?
- How many dynamic requests does each page view create on the server?
- How long does each of those requests take on average?
Once you know these three values, you can see exactly where your hosting plan will start to struggle.
What is the difference between concurrent users and concurrent requests?
Concurrent users are the people active on your site within the same time window. Concurrent requests are the requests your server is actually processing at that moment. The two numbers are usually very different.
For example, the Google Analytics 4 Realtime report shows user activity from the last 30 minutes, according to the Google Analytics Help page. Seeing 300 active users there does not mean your server handles 300 requests at once. Most of those users are reading, scrolling or looking at an image in any given second. Their browsers ask the server for nothing new.
Example calculation: if each of 300 active users opens a new page every 60 seconds on average, you get about 5 page views per second. If server-side work for each page takes 0.5 seconds, the server processes around 2.5 requests at the same time on average. In other words, a crowd of 300 people turns into a handful of simultaneous jobs.
This distinction sits at the heart of capacity math. As a result, you should translate "how many people can visit at once" into "how many requests per second, and how many seconds each."
How do you calculate requests per second (RPS)?
Requests per second (RPS) is the number of requests that reach your server within one second. For capacity math, the dynamic requests matter most, because they run code on the server.
The basic formula looks like this:
dynamic RPS = page views per second x dynamic requests per page
To find page views per second, divide your peak-hour page views by 3,600. Then multiply the result by the number of dynamic requests per page. On a WordPress site, the HTML document itself is a dynamic request. On top of that, some themes and plugins fire admin-ajax or REST API calls in the background.
Static files, meaning CSS, JavaScript, images and fonts, are requests too. However, the web server delivers them straight from disk or cache, and neither PHP nor the database steps in. For that reason, count static requests separately. They mostly affect bandwidth and connection counts, and they barely touch CPU load.
If you skip this split, you either underestimate your capacity or you miss the real bottleneck: the PHP layer.
How do you find your peak hour load?
Peak load is the traffic your site receives during its busiest window. You plan capacity for that peak, not for the average. After all, a site slows down at its busiest moment, not at an average one.
The most practical way to find your peak hour is to check the hourly breakdown in your analytics tool. In GA4, you can split reports by hour and see which hours stand out. Then note the page views in that hour.
Example calculation: a site with 10,000 daily page views gets 12 percent of its daily traffic in the busiest hour. That hour then has 1,200 page views, which works out to about 0.33 page views per second. The 12 percent here is purely an assumption, so swap it for your own data.
Still, even an hourly average hides short spikes. When you send a newsletter or launch an ad campaign, traffic crowds into a few minutes. That is why we suggest adding a "spike multiplier" to the math:
- For steady, mostly organic traffic, a lower multiplier may be enough.
- For sites that announce offers by email, SMS or social media, keep the multiplier high.
- For TV ads or major sale days, build a separate plan.
We cover how to keep a site from crashing during campaigns in a separate article. Here, we focus only on the logic of the calculation.
How many requests does one page view send to the server?
A page view rarely ends with a single request. First, the browser asks for the HTML document. Next, it loads the stylesheets, scripts, images and fonts that the document references. On a modern page, that can add up to dozens of requests.
To see your own number, open the Network tab in your browser's developer tools and reload the page. At the bottom you will find the total request count and the amount of data transferred. You can also filter by type to separate the document from XHR or fetch calls.
For capacity purposes, sorting requests into three groups makes the job easier:
- The dynamic document request: the page HTML. Without a cache, PHP and the database run for it.
- Dynamic background calls: cart updates, live search and form submissions.
- Static files: CSS, JS, images and fonts. The web server or a CDN delivers them.
In the math, the first two groups count as "dynamic requests per page." Meanwhile, the third group belongs in the bandwidth and transfer calculation. This way you separate the work that loads the CPU from the work that loads the network.
How does Little's Law apply to hosting capacity?
Little's Law states that the average number of items in a system equals the arrival rate multiplied by the average time each item spends in the system. In short form, L = λW. John D. C. Little proved the result in 1961 and later reviewed its first fifty years in a paper in Operations Research.
Applied to a web server, the formula becomes:
concurrent requests = requests per second x average response time (seconds)
Example calculation: if 4 dynamic requests arrive per second and each takes 0.5 seconds on average, the server handles 2 requests at once on average. If response time climbs to 2 seconds, the same traffic now keeps 8 requests in flight.
That last point matters a lot. Even when traffic stays flat, a longer response time fills the server. A slow database query or a plugin that waits on an external API eats capacity directly. Consequently, you can raise capacity in two ways: add resources, or make each request faster.
You can also flip the formula. Divide your number of workers by the average response time, and you get the highest dynamic request rate you can sustain per second.
Why do PHP workers set your real capacity?
The PHP worker count is the upper limit of PHP processes your server can run at the same time. On PHP FPM setups, the pm.max_children directive defines it. The official PHP documentation says plainly that this option sets the limit on the number of simultaneous requests that FPM will serve.
So with 8 workers, the server processes at most 8 dynamic requests at a time. The ninth request waits until a worker frees up. A short wait only feels like slowness to the user. A long queue, on the other hand, leads to timeouts and errors such as 502 or 503. We explain how to diagnose that error in our 503 Service Unavailable guide.
When FPM hits the worker limit, it writes a warning to its error log. If you find lines saying the pool reached the max_children setting, you know you touched the capacity ceiling.
That said, raising the worker count without limit does not solve anything. Each worker uses memory and shares CPU cores. If you push the count far beyond what the CPU can handle, requests stop queuing and instead all slow down together. That is why you tune worker count against CPU and RAM at the same time.
How much difference does caching make?
On an uncached page, every visit runs PHP code, queries the database and rebuilds the HTML. With a full page cache, the server sends ready-made HTML straight from disk or memory. In most cases, no PHP worker even wakes up.
This changes the capacity math at its root. The "average response time" in Little's Law drops sharply thanks to the cache, and the number of concurrent workers you need drops with it. You find the exact ratio through your own measurements, because your theme, plugins and server software all shape the result.
Caching comes in several layers:
- Full page cache: stores finished HTML and delivers the biggest capacity gain.
- Opcode cache: keeps compiled PHP code in memory. Our OPcache guide covers the details.
- Object cache: keeps frequent database results in memory. Our article on Redis vs Memcached explains this layer.
On the other hand, cart, account and checkout pages are personal, so they usually stay outside the cache. For an online store, then, you estimate cacheable and non-cacheable traffic separately.
How do you estimate capacity from CPU and RAM limits?
Worker count has two natural ceilings: memory and processor. Calculate both, and treat the lower one as your real limit.
For the memory ceiling, use this formula:
max workers (RAM) = (total RAM - share for other services) / average memory per worker
The share for other services covers the operating system, the database, the web server and any cache service. Memory per worker depends on your application; a plugin-heavy site uses more. You measure it by checking how much memory the running PHP processes take on your server.
For the CPU ceiling, follow a similar path:
max dynamic RPS (CPU) = CPU cores / average CPU time per request
Example calculation: on a 2-core server, if each dynamic request uses 0.25 seconds of CPU time on average, the processor handles roughly 8 dynamic requests per second. Even if memory allows 30 workers, the CPU struggles above 8 requests per second. In this case, the bottleneck is CPU, not RAM.
We explain how to read server load in detail in our load average article. After you finish the capacity math, check it against that metric too.
Worked example: how many visitors can my hosting handle?
Now let us combine all the pieces into one example. Every figure below is an assumption, so plug in your own data for your real site.
| Step | Assumption or formula | Result |
|---|---|---|
| Monthly page views | 300,000 (assumption) | About 10,000 per day |
| Busiest hour share | 12 percent of daily traffic | 1,200 page views per hour |
| Page views per second | 1,200 / 3,600 | About 0.33 |
| Spike multiplier | 5x (campaign moment assumption) | About 1.7 page views per second |
| Dynamic requests per page | 2 (HTML plus one background call) | About 3.4 dynamic RPS |
| Average response time | 0.6 s (uncached assumption) | About 2 concurrent requests |
By Little's Law, this site needs about 2 workers on average at peak. Requests do not arrive at even intervals, though; sometimes they bunch up. So it makes sense to keep several times the calculated value as worker headroom.
Now look at it in reverse. With 8 workers and a 0.6 second average response time, the theoretical ceiling is about 13 dynamic requests per second. At 2 dynamic requests per page, that equals roughly 6.5 page views per second. Even so, do not run the system at its ceiling; leave comfortable headroom.
When you ask how many visitors can my hosting handle with a table like this, the answer stops being a marketing number. Instead, it rests on your own data.
How do you calculate bandwidth and monthly transfer?
Beyond CPU and memory, capacity also has a network side. Here you need to separate two ideas. Bandwidth is the amount of data you can move per second, while monthly transfer is the total data moved over a month.
A rough formula for monthly transfer:
monthly transfer = average page weight x monthly page views
Example calculation: with an average page weight of 2 MB and 300,000 monthly page views, an uncached scenario produces roughly 600 GB of transfer. However, returning visitors keep static files in their browser cache. If you use a CDN, most static files also leave from the CDN rather than your server. As a result, the real figure usually lands below this rough estimate.
For instant bandwidth needs, multiply peak page views per second by page weight. Compressing images and removing unneeded scripts cuts both transfer and the time users wait.
We cover the full topic in our hosting bandwidth guide. In capacity planning, bandwidth is rarely the first bottleneck. Still, it can move to the front on image and video heavy sites.
Where do you get real numbers?
The math is only as good as the data you put into it. You start with assumptions, but you should switch to measured values quickly. There are three main sources.
- The resource usage screen in your hosting panel: on shared hosting, it shows how close you get to CPU, memory, I/O and process limits. Its name and contents vary by provider.
- Analytics tools: here you find hourly page view distribution, peak hours and campaign days.
- Server logs: they record when each request arrived, which URL it hit and, depending on configuration, how long it took.
These three sources complement each other. Analytics shows human traffic, while logs also include bots, crawlers and background calls. For instance, an hour that looks quiet in analytics may show heavy bot traffic in the logs, and that explains the server load.
To connect general slowness with server-side causes, read our article on why your website is slow. There we look closely at how TTFB, the database and resource limits relate.
How do you pull response times from server logs?
Average response time is the most critical input in Little's Law, and server logs give you the most reliable value. Default log formats often leave timing out, so you need to extend the format.
On Nginx, add the $request_time variable to your log format. On Apache, the %D format code records the time taken to serve the request in microseconds. After adding these fields, calculate the average duration of dynamic requests during your peak hour.
log_format timed '$remote_addr [$time_local] "$request" $status $request_time';
access_log /var/log/nginx/example.com.access.log timed;
Do not stop at the average. The slow tail, meaning the slowest 5 percent or 1 percent of requests, decides whether a queue forms. If the average looks like 0.4 seconds but some requests take 5 seconds, those slow requests are what block your workers.
If reading logs by hand feels tedious, our log file analyzer groups requests by status code, URL and bot type. That way you quickly see which pages create the most load.
On shared hosting, you may not have permission to change the log format. In that case, work with the raw access logs your provider offers, and ask the provider for timing data.
How do you validate the math with a load test?
A load test sends controlled, synthetic traffic to your site so you can compare your math with real results. The calculation gives you an expectation; the load test shows whether that expectation holds.
A simple starting tool is Apache's ab program. According to the Apache documentation, -n sets the total number of requests and -c sets how many requests run at a time. The docs also note that ab does not implement HTTP/1.x fully. In some cases, it may measure its own performance more than the server's.
ab -n 500 -c 10 https://staging.example.com/
Follow these rules when you run a load test:
- Test a staging copy of the site instead of the live site.
- On shared hosting, get written approval from your provider first. Otherwise, the traffic may look like an attack.
- Raise concurrency step by step and note where response time jumps.
- Test cached and uncached pages separately.
The point where response time rises sharply is your practical capacity. If it sits close to the ceiling you calculated, your assumptions hold up.
How do shared hosting and a VPS differ in capacity?
On shared hosting, you share one server's resources with other accounts, and the provider caps each account on CPU, memory, processes and I/O. On a VPS, you get dedicated virtual resources and you manage the configuration yourself.
| Criterion | Shared hosting | VPS |
|---|---|---|
| Who sets the worker count? | The provider, based on plan limits | You, based on server resources |
| Where does the capacity limit come from? | Per account process and resource limits | The virtual server's CPU, RAM and disk |
| Log and config access | Limited | Full |
| Load testing | Needs provider approval | Possible at your own responsibility |
| Maintenance effort | Low | High, needs admin skills |
On shared hosting, the most important input for capacity math is the concurrent process limit your provider grants your account. That value varies by plan, so ask your provider for it in writing. We cover shared hosting resource limits in detail in a separate article.
For the differences between a VPS and a cloud server, see our VPS vs cloud server vs VDS comparison.
Why should you question visitor claims in hosting ads?
Hosting plan pages often say a plan "suits sites with X monthly visitors." Such lines can give you a rough idea, but the assumptions behind them rarely appear on the page.
The answer any plan gives to how many visitors can my hosting handle depends on these questions:
- Does the estimate assume a fully cached site or an uncached online store?
- Does it assume traffic spreads evenly over the month, or does it account for peak hours?
- What average page weight and how many dynamic requests per page does it assume?
- What is the concurrent process limit per account?
Without answers, the figure is just a rough marketing signal. The same plan may run comfortably for a simple business site and still struggle with a store that does heavy product filtering.
So when you pick a plan, look at the technical limits rather than the visitor figure. We gathered the other criteria in our guide on how to choose web hosting. Rather than praising or blaming any specific company, focus on asking the right questions.
When should you leave the math to your hosting provider?
Not every site owner needs to tune worker counts or change log formats. Sometimes the best move is to collect your data and hand the decision to your provider or your technical team.
For example, on managed or shared hosting you have no access to FPM settings. The provider's support team knows your account limits better than you do. In that situation, your job is to gather peak-hour data and error times and pass them on.
Likewise, if you lack server administration experience, do not change worker counts on a VPS by trial and error. A wrong value can exhaust memory and make the whole server stop responding. Leave such changes to whoever manages the server.
Even so, knowing the logic of the math gives you leverage. Instead of telling your provider "the site is slow," you can say "at peak we see roughly this many dynamic requests per second and we hit the worker limit." You will get a faster and more accurate fix that way. If you need a bigger plan, our hosting upgrade guide helps you switch without downtime.
How often should you update your capacity plan?
Capacity math is not a one-time task. The inputs shift as the site grows, as you add plugins or as your marketing calendar changes.
We recommend redoing the math in these situations:
- Before a big campaign, sale period or TV ad.
- After you add a new theme, a heavy plugin or a new payment integration.
- When peak-hour traffic in analytics rises noticeably.
- When response times in the logs start to climb.
For online stores, this tracking affects revenue directly, because a checkout page that slows down at busy moments means lost orders. If you want to review infrastructure and conversion together for your store, our e-commerce consulting work includes this analysis.
Regular updates reduce surprises. As a result, you walk into your next big traffic day already knowing where the server will strain.
Summary: how many visitors can my hosting handle, step by step?
The answer to how many visitors can my hosting handle comes from a combination of measurements, not from one number. Here is the path in short:
- Find your peak hour and its page views in analytics.
- Calculate page views per second and add a spike multiplier.
- Count dynamic requests per page with browser developer tools.
- Measure average response time from your logs.
- Use Little's Law to estimate concurrent workers needed.
- Compare that need with CPU, RAM and provider limits.
- Confirm the result with a controlled load test.
These steps give you a realistic estimate, not a guarantee. Still, that estimate beats the monthly visitor figure on a plan page, because it rests on your site and your traffic.



