OK, here is the configuration: Quad Core Xeon, 4GB RAM, 500GB sata running Win2K3 R2 / IIS 6.0. This server is also running a mail server and SQL Server 2000 is running as the backend for the ASP app.
During a high traffic time I started to notice the browser requests were being serviced very slowly. I did some investigating and here is what I found:
3000+ concurrent users, well, 3000+ session were active, the server has a 20 min timeout.
IIS had about 250MB of memory, SQL Server had about 1.7GB of memory.
The CPU(s) never got over 50%. Yet with plenty of free memory and CPU cycles, the web requests were not being handled quickly. I did a recycle on IIS which booted all sessions but shouldn't affect SQL Server and suddenly the web requests started being handled quickly again, so this defiitely looks IIS related.
I had upgraded from a P4 server which was pretty robust but would simply max out on CPU during these high traffic times, so now I have a more powerful server but seem to be getting limited elsewhere.
I was unfamiliar with the Web Garden feature in IIS 6.0, read about it and it sounded great, so I made the mistake of adding some worker processes to my classic ASP app. Bad idea! User sessions started getting dropped because the processes don't share session data! I quickly went back to a single worker process.
The app consists of a single index.asp file with many #include files which are conditionalized based on a page querystring variable, so I assume IIS sees this as one HUGE file. I figured that this may not be so bad because IIS could cache this one large file which is really the only page being accessed. I hope my assumption is true. Should I be using different ASP File cache option settings? Currenlty I have Cache limited APS files in memory set to 500 and Cache limited ASP files on disk set to the 2000. Number of script engines cahced is 250. These OK?
This app uses it's own app pool and I have since adjusted my Request queue limit from 1000 to 8000 thinking that maybe this limit was bottlenecking this more powerful processor. I don't want to do too much recycling because with 3000 users, bumping them will simply cause a rush as they try to log back in.
I figured that with the extra resources this server has, maybe if I find a way to spread these requests across a web garden that I'd make better use of resources. Since I can't use a web garden, I got the idea of creating subdomains for the same website www, www2, www3, etc. all pointing to the same app using the same SQL Server database. Now each would get it's own w3wp.exe process like a web garden. I'd simply round robin distribute my visitors across these subdomains. Two problems with this though, 1. I have a secure page which has to be on a specific subdomain and if I transfer users from another subdomain to the secure page, then their session will be lost. 2. A minor issue but my web logs will now be spread across 4 subdomains... unless there is a way to combine. Is this idea a good way to go?
Sorry for the long post!!! Hopefully someone will have some insight and someone else will be helped by this information!
Thanks...