Editor’s Note: This post is updated November, 2016 for accuracy and comprehensiveness
A big part of an IIS server management is its monitoring. The monitoring can call attention to issues with the IIS system before they negatively impact the end user’s experience.
The latest version of IIS is 10 – this is the version used in Windows 10 and Windows Server 2016.
In this article we will focus on the different IIS performance counters you should consider when implementing IIS server monitoring and IIS performance tuning.
The first part is focused on general counters measuring the performance of the server hosting the IIS, such as processor, memory, disk, and network utilization. We will go over each one of these counters to find out why it’s a key counter to monitor and what values are considered normal.
The second part of this article focuses on counters specific to the web applications running on IIS, such as ASP.NET, .NET CLR, and Web Service counters.
Keep in mind that the IIS metrics listed in this article and their values are just general best practices. It is important to set a baseline for your environment during normal operation and see the normal values of these counters. Then, when you see performance drops of your applications, you will be able to quickly spot the counter indicating the issue which in turn will tell you more about the cause of the performance drop. They can respectively be used to optimize the IIS performance.
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.
Some additional information on performance counters from Microsoft can be found here: https://technet.microsoft.com/en-us/library/bb687493.aspx