I have simple ASP.NET application which just resizes images with ImageResizer and does nothing else. For testing purposes I disabled disk caching, so images are resized on every request.
When I test performance of the app with JMeter I get the following average response times:
- single worker process, 1 concurrent clients: ~200ms
- single worker process, 10 concurrent clients: ~1200ms
- 4 worker processes, 10 concurrent clients: ~300ms
As you can see, when I run single worker process and 10 concurrent clients, response time increases dramatically despite of available hardware resources: CPU usage during performance test is ~30%, memory usage is ~150MB.
As discussed here,
Web gardens was designed for one single reason – Offering applications that are not CPU-bound but execute long running requests the ability to scale and not use up all threads available in the worker process.
This not seems as my case.
I don't understand why I get such result. What I expect is that even single worker process would provide acceptable response time until it reaches resources limits. And 10 concurrent clients are definitely not a heavy load. Can somebody explain to me, where am I wrong?
My configuration:
- Windows Server 2012 R2
- IIS 8.5 with all default settings (except MaxWorkerThreads)
- quad-core i3 3.4GHz CPU
- 16 GB RAM
My application is just empty ASP.NET MVC application with ImageResizer, added as in this instruction (option 3 - Manual Installation) and with DiskCache plugin disabled in Web.config