The following performance counters are good to keep an eye on:
ASP.NET: Requests/Sec: This counter will give you a hint if your applications are causing the bottleneck. If values are low during peak traffic, you might have a troublesome application.
ASP.NET: Requests executing: This shows how many requests are executing at the moment.
ASP.NET: Requests wait time, ASP.NET:Executing time, and ASP.NET:Requests queued: These three counters should be close to zero if everything is okay.
ASP.NET:Worker processes running: This displays the number of aspnet_wp worker processes.
ASP.NET: Worker processes restarts: Restarts are expensive, so you do not want them. Different process model configuration settings, memory leaks, and access violations affect this, so keep an eye on what is causing the restarts if you suspect anything out of the ordinary.
ASP.NET Applications: The Cache counters are worth looking at here. Examine them carefully and take action if anything seems wrong. But many of the others are worth watching too. Note that these are reset to zero when a process restarts.
.NET CLR Exceptions: #Excepts thrown/sec: This counter indicates how many exceptions are thrown per second. If you have an excessive number of exceptions, performance degrades. Exceptions should normally not be a part of processing.
.NET CLR Loading: Bytes in loader heap: If this counter shows a continuously increasing value, you should watch the .NET CLR Loading: Current assemblies counter to examine if too many assemblies are loaded per application domain.