Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am currently having a problem with a windows 2008 server running IIS 7. The server runs several sites but only seems to have the issue with one particular site.

Every so often, the whole server slows to a crawl with nearly all requests timing out! Invariably, when we log in to take a look there is always an IIS process using up around 90% cpu. Looking into the worker processes in IIS there are usually one or two requests that have been running for a long time. They are always in the ExecuteRequestHandler state with ManagedPipeline as the module name and the current ones i'm looking at have been running for 7686248 (what units is this in, it doesn't say?). It is also not always the same page, in fact we have seen at least 3 different pages listed under url when this has happened.

It seems that the only way to bring the server back to life is to kill the 90% process!

The site is running under .Net 4.0 and the code on it is very similar to other sites on the server which do not have the problem!

How do I start troubleshooting this?

share|improve this question
add comment

2 Answers

Perhaps look at enabling additional logging: http://technet.microsoft.com/en-us/library/cc731798%28WS.10%29.aspx

share|improve this answer
    
Unfortunately because the requests never actually fail, failed request tracing doesn't actually have any useful information (or i'm reading them wrongly!). Because this takes all of the sites on the server down, is there a way that I could limit the cpu allowed by this application pool so that I can troubleshoot the issue better while its still happening? –  Chris Foot Jul 2 '10 at 13:27
    
You can limit the app pool CPU usage in the advanced settings of the application under the cpu section. –  Sam Jul 6 '10 at 16:47
add comment

That seems that the ASP.NET Application is going bad, smells like a really long/infinite loop.

I would enable Failed Request Tracing and limit it based on requests that take longer than maybe 60 seconds for every content and every status code (use the range 100-600).

Also although not exposed in the UI you can also configure a command line to run where you could generate a dump of the process so that you could later use a debugger (like Windbg + SOS.dll) to see exactly where the requests are and what are they doing. This is probably the best way but it does require a bit of knowledge of the Windows Debugging tools http://www.microsoft.com/whdc/devtools/debugging/default.mspx .

A simpler alternative is you could also instrument your application, in particular the URLs and pages that you have seen take so much time (by the way the time is in milliseconds so your page has taken over 2 hours!!!), you can use System.Diagnostics or Page.Trace and route them to the FREB log and that way you will get meaningful info.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.