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 have a web server with more than a few ASP.NET sites running on it. Every so often, i notice that IIS is pushing the server's CPU to 100%. The sites share application pools, per .NET version they are running.

What i'm looking for is a way to be able to pinpoint which site it is that is doing this, using some tool. If that tool happened to get down into the code to show it, that would also be nice. If not, i'm happy just knowing which site is causing the issue.

I've already tried using ANTS. However, with ANTS you need to know which site it is, and then have it running and waiting on said CPU-crashing web app. Not perfectly ideal.

Any experience/ideas?

share|improve this question

3 Answers 3

Some people consider a good practice, create an app pool per website/application, so that when you need to restart a website it will not affect the others. In the same way, it will create a new IIS worker process w3p.exe per website and by doing so i believe you could monitor more easily each my site was peaking the cpu.

Then to watch in details the CPU usage, you can for instance use Process Explorer from Miscrosft Sysinternal http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx which is a great free tool where you can gather the info you're lookin at.

Hope my tip helps in some way troubleshoot the IIS issue.

share|improve this answer

I've answered the exact same question here: IIS6 CPU Spiking

Below is the text from my answer:

How many App pools? You can start by moving your websites into separate app pools and then using task manager + command line iisapp to match up which app pool matches which task. That will help you identify which web it is to start with.

Once you have that identified grab the microsoft IIS debugging tool: http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&DisplayLang=en

Then:

Using IIS Debug Diagnostics to troubleshoot Worker Process CPU usage in II6

Failed request tracing in IIS7 can help track down many performance issues with websites, but we still have a broad customer base on IIS6. Troubleshooting performance issues in IIS6 has been quite difficult until Microsoft released a set of tools that gave greater insight into analyzing a stack trace.

The IIS Debug Diagnostics Tool can help track down CPU and memory issues from a worker process. Microsoft has a nice kb article that goes over the basics as well: http://support.microsoft.com/kb/919791.

  1. Install the IIS Debug Diagnostics locally on the system.

  2. Open the Debug Diagnostics Tool under Start > Programs > IIS Diagnostics > Debug Diagnostics Tool > Debug Diagnostics Tool.

  3. Click Tools > Options And Settings > Performance Log tab. Select the Enable Performance Counter Data Logging option. Click OK.

  4. Use task manager to find the PID of the worker process.

  5. Select the Processes tab and find the process in the list.

  6. Right-click on the process and select Create Full Userdump. This will take a few minutes and a box will pop-up giving you the path to the dump file.

  7. Select the Advanced Analysis tab and click the Add Data Files button. Browse to the dump file that was jump created and click OK.

  8. Select Crash/Hang Analyzers from the Available Analysis Scripts box for CPU Performance and crash analysis. Click Start Analysis.

After a few minutes, a report should be generated containing stack trace information as well as information about any requests executing for longer than 90 seconds. Note that the memory dump with use a few hundred megabytes of space, so be sure to install the tool on a drive with sufficient debugging space. Also, if the box is under heavy load, you can create the user dump on the system, copy the file to your workstation, and perform the analysis locally.

share|improve this answer

There is a very simple way to this, at least in IIS8, don't know if this existed in IIS6. Anyway I think it's helpful.

  • You go to IIS
  • Select your server on the left
  • click Icon Worker Processes
  • see CPU / Memory per application

Worker Processes

share|improve this answer

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.