Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

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

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Monitor a running application

  1. Install the current dotnet-counters tool as described in Microsoft’s documentation, and identify the process name or process ID.
  2. Run dotnet-counters monitor -n YourAppName --counters System.Runtime,Microsoft.AspNetCore.Hosting. You can use a process ID instead of the process name.
  3. 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

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

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

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.