Link to home
Start Free TrialLog in
Avatar of cacklebunny
cacklebunny

asked on

"Server Too Busy" error that never recovers on IIS 5.0 ASP.NET

We are running ASP.NET version 1.1.4322 on a server running IIS 5.0 (Windows 2000 Professional). We are also concurrently running the old ASP 3.0 engine.

For the last month, we've run into times of the day in which ASP.NET pages are inaccessible and relay "Server Too Busy" errors to our clients.  The performance Monitor yields no clues --everything looks great...no requests in queue, no open sessions, nothing.  The Event Viewer is equally without red flags.  While ASP.NET pages are inaccessible, ASP 3.0 are readily accessible and run perfectly.

If it were truly traffic-related and we legitimately did hit 100 or more concurrent requests in queue to generate the "Server Too Busy" error, it would seem that AFTER these requests were fulfilled, the people would reach our site.  However, once these errors start accumulating, our site remains down, forcing us to reboot the server.

Our httpRunTime attribute values are as follows:

<httpRuntime
            executionTimeout="90"
            maxRequestLength="4096"
            useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8"
            minLocalRequestFreeThreads="4"
            appRequestQueueLimit="500"
            enableVersionHeader="true"
        />

The server itself is running Windows 2000 Service Pack 4 with Intel Xeon Pentium 4, 2.80 MHZ with 1.5 gigabytes of RAM and 46 gigabytes of free disk space.
 
Avatar of sgstuart
sgstuart

Hi cacklebunny,
      Are there any runaway processes in your Task Manager when this is happening?   By this I mainly mean the size not the CPU usage.   look for dllhost especially.    The problem could (also) be caused by calls to a database that are not happening as they should, and not be dropped when they are supposed to.   Usually these database calls are done with a com object which would create a dllhost process, but sometimes they are not, and may not have one.  I have run into this problem both ways.

Thanks,
Steven Stuart
Avatar of alimu
Windows 2000 Professional = desktop software = 10 concurrent connections maximum.  Did you mean Windows 2000 Server?
If you're running desktop software you might be hitting this limit.
Avatar of cacklebunny

ASKER

That is correct:  we are using Windows 2000 Server edition, not Windows 2000 Professional.  Sorry for the confusion.

With regard to the Task Manager processes, we don't typically see anything unusual running there...and no DLLHOST call.
no problem, just wanted to clarify the original question.
Hi cacklebunny, didn't mean to desert you, have been having email problems the last couple of days.

The most common reason for this is that queued requests are hitting a value called requestqueuemax.  When this point is reached the "server too busy" notice will display.  You're going to need to look at tuning your IIS server to get around this.  
You can setup performance monitoring to see for sure if this does apply, the following articles give some instruction on performance tuning IIS so you can keep queued requests below requestqueuemax.
http://www.microsoft.com/serviceproviders/resources/techresarticlesiistuning.mspx
http://www.15seconds.com/howto/pg000112.htm

Have a read, try some performance monitoring to identify what exactly's happening, do a bit of a tune up and if you've got more questions about it let me know.
cheers,
AJ.
without feedback from asker, I would assume my last post was the solution...
I don't think so alimu.. he is not having any problems with ASP.. it is ASP.Net that is returning the error..
http://www.devx.com/vb2themax/Tip/18804


Reduce Server Too Busy errors with the httpRuntime tag
The httpRuntime tag in ASP.NET configuration files lets you determine several features of ASP.NET at the machine or site level, including the how ASP.NET uses multi-threading. Here's the complete syntax for this tag:

<httpRuntime executionTimeout="seconds"
             maxRequestLength="kbytes"
             minFreeThreads="numberOfThreads"
             minLocalRequestFreeThreads="numberOfThreads"
             appRequestQueueLimit="numberOfRequests"
             useFullyQualifiedRedirectUrl="true|false"  />

minFreeThreads is the minimum number of threads that must be free for ASP.NET to accept a request. The default value is 8, so ASP.NET normally rejects a request if there are 7 or fewer free threads. This setting lets you prevent stalls when your site accepts a request that creates additional threads. On the other hand, if you know that your .aspx pages don't spawn additional threads, or spawn fewer than 7 threads, you can decrease this value and indirectly let ASP.NET server more pages at the same time. This trick can significantly improve your site's scalability.
minLocalRequestFreeThreads is like the minFreeThreads attribute, but it's applied to local requests, which often issue child requests.

Finally, appRequestQueueLimit is the maximum number of requests that ASP.NET can queue for the application when there aren't enough free threads to serve it. Any request that arrives when the queue is full is rejected with a 503-Server Too Busy error. You can safely increase this number if your typical .aspx page takes a very short time to complete.



Michel
so the httpRuntime tag will overrid the requestqueuemax, thus ASP.Net is returning errors due to the limits on the httpruntime tag that are it seems lower than the requestqueuemax limits..

Cheers
Michel, thanks for adding another possible solution, it's good to have an ASP.NET development perspective on the problem, I tend to focus on server side solution so if a code-based solution is required it's not for me.
The problem remains that the author hasn't responded either to my comment or the question abandonment comments.  I'm not sure if they have fixed the problem or not.
ASKER CERTIFIED SOLUTION
Avatar of modulo
modulo

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial