iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
The right ASP.NET performance counters depend on the runtime: classic ASP.NET on .NET Framework is monitored with Windows Performance Monitor, while ASP.NET Core and later .NET use EventCounters and System.Diagnostics.Metrics. For a quick modern .NET check, use dotnet-counters; for production history and alerts, export metrics to a monitoring backend.
Choose counters for your ASP.NET generation
Do not treat legacy ASP.NET counters as a universal list. Microsoft’s migration guidance distinguishes Windows Performance Counters used by .NET Framework applications from the cross-platform EventCounters and metrics available to .NET Core and later. The modern metrics API arrived in .NET 6; .NET 8 added built-in networking and ASP.NET metrics using it, and .NET 9 added built-in runtime metrics. Availability depends on the target framework, so check its documentation before relying on a particular measurement. Microsoft’s migration guide
Classic ASP.NET: use Windows Performance Monitor
For classic ASP.NET applications running on .NET Framework, open Windows Performance Monitor (perfmon.exe) and add the ASP.NET Applications performance object. Its counters are associated with application instances, so select the instance for the application you are investigating. The special __Total__ instance aggregates values across applications on that server; it is useful for a server-wide view but cannot by itself identify which application is responsible for a change. Microsoft’s classic ASP.NET monitoring guidance
Use the counter reference that matches the deployed .NET Framework version when choosing specific legacy counter names. These Windows counters are not a substitute for ASP.NET Core metrics.
#1 Best Overall
ASP.NET Core and later .NET: monitor provider families
Modern .NET exposes measurements through providers rather than one definitive “ASP.NET counter.” Start with the family related to the symptom, then compare its values with request behavior and the application’s own baseline.
| Provider family | What it helps investigate | How to interpret it |
|---|---|---|
Microsoft.AspNetCore.Hosting |
HTTP hosting activity, including current requests and request duration in Microsoft’s documented example. | Use request counts and duration to understand traffic and latency patterns. Check the exact metrics available for your target framework. Microsoft’s ASP.NET Core 8 metrics guide |
System.Runtime |
Runtime health and resource behavior. | Useful when investigating resource pressure; relate readings to application behavior rather than treating an isolated value as a diagnosis. Microsoft’s EventCounters reference |
Microsoft-AspNetCore-Server-Kestrel |
Kestrel server telemetry. | Use it to narrow an issue to server behavior, alongside request and error data. Check availability against the deployed version. Microsoft’s ASP.NET Core metrics guide |
System.Net.Http, System.Net.NameResolution, System.Net.Security, and System.Net.Sockets |
Outgoing HTTP, DNS, TLS, and socket behavior. | These can help investigate dependency and network paths. Microsoft notes that networking telemetry has overhead; subscribe only to providers relevant to the investigation or operational need. Microsoft’s networking telemetry guidance |
A counter is a clue, not a diagnosis. Correlate changes with the affected requests, errors, deployments, and the service’s normal behavior. The same measurement can mean different things under different traffic levels or workload patterns.
Rank #2
Inspect a modern .NET process with dotnet-counters
Microsoft describes dotnet-counters as a tool for “ad-hoc health monitoring and first-level performance investigation.” It can monitor a running process or collect selected EventCounter and Meter values for later review. Microsoft’s dotnet-counters documentation
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Monitor a running application
- Install the current
dotnet-counterstool as described in Microsoft’s documentation, and identify the process name or process ID. - Run
dotnet-counters monitor -n YourAppName --counters System.Runtime,Microsoft.AspNetCore.Hosting. You can use a process ID instead of the process name. - Observe the measurements while reproducing or investigating the issue. If the tool cannot attach, check that it runs as the target process’s user or as root, and verify compatible tool and target architectures where applicable.
Collect measurements to a file
To start the app under the collector and capture selected providers—including startup—use:
dotnet-counters collect --format json --counters System.Runtime,Microsoft.AspNetCore.Hosting -- dotnet YourApp.dll
Microsoft documents CSV and JSON output. Confirm current command options in the official CLI documentation because they may change. Command syntax and options
Rank #4
Use dashboards and alerts for ongoing monitoring
A command-line session is useful for a short investigation, but production monitoring needs measurements over time. Export metrics to a monitoring system, build dashboards around the service’s important behavior, and alert when it departs from a defined service objective or its established baseline. Microsoft documents an ASP.NET Core workflow using OpenTelemetry and Prometheus. ASP.NET Core metrics and monitoring
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →There is no universal ASP.NET CPU, memory, request-rate, or latency threshold in Microsoft’s guidance. Set alert conditions for your application and its service objective. For example, Microsoft illustrates comparing an application’s stated response-time objective with a measured response; the example values are illustrative, not general targets.
Quick Recap
Which monitoring approach should you use?
| Approach | Best fit | Important constraint |
|---|---|---|
| Windows Performance Monitor | Classic ASP.NET on .NET Framework. | Windows-only legacy counter model; choose the correct application instance. Microsoft |
dotnet-counters |
Ad-hoc live checks and first-level investigation of modern .NET. | Process access and compatible tooling matter; it is not a long-term alerting backend. Microsoft |
| Metrics export plus monitoring backend | Dashboards, historical trends, and alerts. | Requires instrumentation and export configuration, plus thresholds tied to the application’s objective. Microsoft |
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

