This week, I was working on some xDB issues, and during that process, we decided to run a stress test on a new Sitecore 10.4 instance to better understand its behavior under load.
The tests were executed against a real corporate website, not a demo or a simplified solution. The site is fairly complex, which makes the results more representative of real production scenarios.
QA Environment (Non-Scaled)
The QA environment is not scaled, meaning all Sitecore roles are running on the same server.
- The environment handled around 350 concurrent users without performance issues.
- After 400 users, page load times increased noticeably.
- CPU usage eventually reached 100%.
- Beyond 500 users, the site became extremely slow and nearly unusable.
At that point, it was clear the environment had reached its limit, so after running the test for about an hour, we stopped it to avoid wasting more time on a setup that was never meant to scale.
UAT Environment (Scaled)
The UAT environment is scaled, with dedicated roles and:
- 128 GB RAM
- A single Content Delivery (CD) server
Result
- The site handled up to 600 concurrent users with no noticeable degradation.
- Performance started to degrade around 750 users.
- At 1,000 users, the site stopped responding correctly and began returning errors.
I was watching the UAT CPU usage during the test, and it stayed fairly low until about 750 users. After that, it quickly ramped up to 98%, and that’s when things started to break. Pages wouldn’t load anymore, and load times were already over two minutes in Chrome.
I kept the test for more minutes and checked all the Sitecore Roles, However, the CD1 was the most impacted.
Production Environment (Scaled)
The Production environment is scaled, with dedicated roles and:
- 32 GB RAM
- 2 Content Delivery (CD) server
Result
- The site handled up to 300 concurrent users with no noticeable degradation.
- Performance started to degrade around 450 users.
- At 600 users, the site stopped responding and we could not load the main page anymore.
I expected two CDs to handle much more load than a single CD. After looking more closely at the setup, it became clear why that wasn’t the case: each CD had only 32 GB of RAM, while the UAT environment had 128 GB of RAM on a single server and could handle much more traffic.
Some Thoughts
From these tests, a few conclusions are clear:
- Under-provisioned horizontal scaling is worse than properly sized vertical scaling.
- For a real Sitecore 10.4 website with tracking enabled, a single CD(with 128 of ram) can reliably support around 600–700 concurrent users.
- To handle more traffic safely, additional CD servers are required.
These results are not meant to be universal sizing rules, but they can serve as a practical reference point for teams planning or validating Sitecore 10.4 deployments.
I hope this helps others who are running similar tests or facing similar questions.