A common question we get goes something like this: "I'm running a 100 user load test and getting X RPS (requests per second).  When I add 500 more users, I'm still getting X RPS.  What's wrong?"

Here's a list of some things to check when you're not able to generate the load you expected:

  1. Is your web server CPU/Memory/Network maxed out?
  2. Is your load generating machine’s (VS machine or agents) CPU/Memory/Network maxed out?
  3. Is your database server’s (if one exists) CPU/Memory/Disk/Network maxed out?
  4. Do you have ThinkTime turned on in your load test?  This will limit the rate each “user” can submit requests.  For example, 5 seconds of ThinkTime per request will yield a maximum of 0.2 RPS per “user”.  Turn ThinkTime off for maximum load generation or use ThinkTime and increase the number of users for more realistic load generation.  The latter will generally require more memory.
  5. Make sure the Proxy properties on your web tests are not set to “default”.  This enables automatic proxy server detection which is VERY slow and will greatly reduce your maximum throughput.
  6. Don’t forget a load testing tool is designed to find bottlenecks in your application.  If you have pages with high response times due to a database or CPU bottleneck it will limit the number of requests each virtual user can issue per second.  Start out with a small amount of load and make sure response times stay reasonable as your ramp up the load.  Twenty users with ThinkTime shouldn’t see greater than 10 second response times, for example.  You can use the Response Time Goal property to set the maximum expected response time on each request.

The problem generally comes down to something on this list.  Do you have any tips that need to be added to this list?