IIS 7 Perfmon Counters - What should I monitor to see if my website needs more horsepower?


I have a (2) node WLBS IIS 7 Webserver cluster running ASP.NET native applications talking to a SQL backend (SQL 2008 R2).  I want to monitor the IIS counters and any applicable adjacent counters to see if my application and/or server needs to be tuned for optimal performance.

What should I monitor?  I can't seem to find a best-practices article for monitoring IIS in general, but I was thinking of creating a data-collector set in PERFMON and monitoring:

   - anon users/sec
   - bytes recd/sec
   - bytes sent/sec
   - bytes total/sec
   - cgi requests/sec
   - connection attempts/sec
   - current anon users
   - current connections
   - current non-anon users
   - get req/sec
   - header req/sec
   - isapi extension req/sec
   - total bytes rec'd
   - total bytes sent
   - total bytes transferred
   - total connection attempts (all instances)

   - active requests
   - active thread count
   - requests/sec
   - total threads

   - % Proc Time

   - % commited bytes in use

Physical Disk
   - % Disk Time
   - Avg Disk sec/read
   - Avg Disk sec/transfer

Anything else?  Should I NOT be looking at these?  What is the best way to see if the web server is running optimally and does NOT need more WLBS nodes and/or a balancing appliance?  

I hear users complain that the application could be faster, but they don't say that it's exactly slow, and I'm happy with the speed that queries are returned...so I need less subjective results and more objective results.  

Ideas anyone?

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Emmanuel AdebayoGlobal Windows Infrastructure Engineer - ConsultantCommented:
Processor\% Processor Time – refers to the average percentage of processor time occupied. It is a main indicator to consider when deciding whether the CPU power of the IIS server is enough. It is recommended for this counter to remain below 85% for the system to be considered healthy.

System\Processor Queue Length – the processor queue is being filled up with threads when the server’s processors are busy servicing other threads at the moment. If this counter is usually above 2 and the % Processor Time remains on high levels, then the processors are considered a bottleneck in the system.

Memory\Available Mbytes – refers to the amount of physical memory (measured in MBytes) on the system that can be used by new processes. If the free memory is equal or greater than 50%, the system is considered healthy. A value of 25% free memory indicates a potential problem. If the memory is below 10%, the condition has to be examined carefully and precautions have to be taken. If the free memory is less than 5%, the performance of the system is negatively impacted.

Memory\Pages/sec – refers to the amount of read and write requests from memory to disk. If this value remains high and the Available Mbytes are less than 10%, then the Memory subsystem is considered a bottleneck. Less than 500 Pages/sec are considered normal, more than 500 may affect system’s performance.

PhysicalDisk\% Disk Time – refers to the percentage of time the disk was occupied. It takes into account both read and write requests sent to the disk.

Network Interface\Bytes Total/sec – refers to the total amount of bytes – both sent and received – over the network. If the value of this counter is usually greater than 80%, then maybe another or faster network card should be installed on the server.

IIS role specific counters

ASP.NET Applications\Requests/Sec – shows the throughput of the ASP.NET application on the server. It is monitored along with other counters to determine whether the server is handling the application as it’s supposed to.

ASP.NET\Application Restarts – indicates the number of restarts of the application in the server’s uptime. A high value of this indicator should be monitored. The general counters can help you identify whether it is caused by a bottleneck in the system or by the application itself.

ASP.NET\Request Wait Time – shows the amount of time (in milliseconds) that the last request was held in the queue.It should be close to 0 ms. If this indicator is usually greater than 1000 ms, the performance of the IIS server is suffering.

ASP.NET\Requests Queued –  the queue fills up with requests that wait to be processed. This counter should be monitored to find out when an application is overwhelmed. Then, an analysis of the application and server performance altogether can help the administrator identify the cause for the filled queue.

.NET CLR Exceptions\# of Exceps Thrown / sec – shows the number of exceptions per second that the application is throwing. Exceptions should be rare, because each exception takes a lot of system resources. That’s why this counter should be carefully monitored, especially if it is greater than 5% of the counter ASP.NET Applications\Requests/Sec or 100 exceptions/sec for example.

.NET CLR Memory\# Total Committed Bytes – shows the amount of virtual memory reserved for the application on the paging file. It should be monitored along with the general counters to identify issues with the performance of the IIS. Problems can be caused by a small amount of memory installed or by an application overusing the memory.

Web Service\Get Requests/sec – measures the amount of GET requests processed in a second. If the value is too high for a particular IIS server, then load balancing or clustering technologies can be applied to lower the burden of the server in question.

Web Service\Post Requests/sec – measures the amount of POST requests processed in a second. Again, if the value is too high for a particular IIS server, then load balancing or clustering technologies can be applied to lower the burden of the server in question.

Web Service\Current Connections – shows the number of active connections with the Web Service. Like with the other web service counters, if the value of this counter is usually too big for the server (the actual number depends on the specific hardware and software installed), then load balancing solutions can be implemented.
Also, you can check the following link for Preferred Values for Frequently Used Performance Counters


You will need to monitor the back database performance as well
•These are listed OBJECT first, then COUNTER
•Memory – Available MBytes
•Paging File – % Usage
•Physical Disk – Avg. Disk sec/Read
•Physical Disk – Avg. Disk sec/Write
•Physical Disk – Disk Reads/sec
•Physical Disk – Disk Writes/sec
•Processor – % Processor Time
•SQLServer: Buffer Manager – Page life expectancy
•SQLServer: General Statistics – User Connections
•SQLServer: Memory Manager – Memory Grants Pending
•SQLServer: SQL Statistics – Batch Requests/sec
•SQLServer: SQL Statistics – Compilations/sec
•SQLServer: SQL Statistics – Recompilations/sec
•System – Processor Queue Length


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft IIS Web Server

From novice to tech pro — start learning today.