{"id":54158,"date":"2025-11-25T04:02:27","date_gmt":"2025-11-25T04:02:27","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=54158"},"modified":"2025-11-25T04:02:27","modified_gmt":"2025-11-25T04:02:27","slug":"dotnet-counters-commands-and-metrcies","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/dotnet-counters-commands-and-metrcies\/","title":{"rendered":"dotnet-counters: commands and Metrcies"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u2705 <strong>dotnet-counters \u2013 Command Reference (Explained Simply)<\/strong><\/h1>\n\n\n\n<p>When you run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">dotnet-counters -h\n<\/code><\/span><\/pre>\n\n\n<p>You see 4 main commands:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Commands<\/span>:\n  <span class=\"hljs-selector-tag\">monitor<\/span>   <span class=\"hljs-selector-tag\">Start<\/span> <span class=\"hljs-selector-tag\">monitoring<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-class\">.NET<\/span> <span class=\"hljs-selector-tag\">application<\/span>\n  <span class=\"hljs-selector-tag\">collect<\/span>   <span class=\"hljs-selector-tag\">Monitor<\/span> <span class=\"hljs-selector-tag\">counters<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-class\">.NET<\/span> <span class=\"hljs-selector-tag\">application<\/span> <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">export<\/span> <span class=\"hljs-selector-tag\">the<\/span> <span class=\"hljs-selector-tag\">result<\/span> <span class=\"hljs-selector-tag\">into<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">file<\/span>\n  <span class=\"hljs-selector-tag\">list<\/span>      <span class=\"hljs-selector-tag\">Display<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">list<\/span> <span class=\"hljs-selector-tag\">of<\/span> <span class=\"hljs-selector-tag\">counter<\/span> <span class=\"hljs-selector-tag\">names<\/span> <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">descriptions<\/span>, <span class=\"hljs-selector-tag\">grouped<\/span> <span class=\"hljs-selector-tag\">by<\/span> <span class=\"hljs-selector-tag\">provider<\/span>.\n  <span class=\"hljs-selector-tag\">ps<\/span>        <span class=\"hljs-selector-tag\">Lists<\/span> <span class=\"hljs-selector-tag\">the<\/span> <span class=\"hljs-selector-tag\">dotnet<\/span> <span class=\"hljs-selector-tag\">processes<\/span> <span class=\"hljs-selector-tag\">that<\/span> <span class=\"hljs-selector-tag\">can<\/span> <span class=\"hljs-selector-tag\">be<\/span> <span class=\"hljs-selector-tag\">monitored<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Below is a <strong>simple explanation for each<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>1. dotnet-counters monitor<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Real-time monitoring (LIVE metrics)<\/strong><\/h3>\n\n\n\n<p>This command shows metrics <strong>live in the terminal<\/strong>.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">dotnet-counters<\/span> <span class=\"hljs-selector-tag\">monitor<\/span> <span class=\"hljs-selector-tag\">--process-id<\/span> 1234 <span class=\"hljs-selector-tag\">System<\/span><span class=\"hljs-selector-class\">.Runtime<\/span> <span class=\"hljs-selector-tag\">Microsoft<\/span><span class=\"hljs-selector-class\">.AspNetCore<\/span><span class=\"hljs-selector-class\">.Hosting<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to diagnose CPU spikes<\/li>\n\n\n\n<li>You want to monitor GC, ThreadPool, HTTP requests, EF load<\/li>\n\n\n\n<li>You need <strong>instant<\/strong> insights<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe7 <strong>2. dotnet-counters collect<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Record metrics into a file<\/strong> (for later analysis)<\/h3>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">dotnet-counters<\/span> <span class=\"hljs-selector-tag\">collect<\/span> <span class=\"hljs-selector-tag\">--process-id<\/span> 1234 <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">metrics<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want offline analysis<\/li>\n\n\n\n<li>You want to attach the file to Jira\/Slack<\/li>\n\n\n\n<li>You want long-running capture for production<\/li>\n<\/ul>\n\n\n\n<p>The output can be consumed by:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PerfView<\/li>\n\n\n\n<li>VS Diagnostic tools<\/li>\n\n\n\n<li>Custom dashboards<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 <strong>3. dotnet-counters list<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Lists ALL available counters grouped by provider<\/strong><\/h3>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">dotnet-counters <span class=\"hljs-keyword\">list<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It shows providers such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>System.Runtime<\/code><\/li>\n\n\n\n<li><code>Microsoft.AspNetCore.Hosting<\/code><\/li>\n\n\n\n<li><code>Microsoft.EntityFrameworkCore<\/code><\/li>\n\n\n\n<li><code>Microsoft.AspNetCore.Http.Connections<\/code><\/li>\n\n\n\n<li><code>Grpc.AspNetCore.Server<\/code><\/li>\n\n\n\n<li>Custom counters you create<\/li>\n<\/ul>\n\n\n\n<p>Use when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to know which counters exist<\/li>\n\n\n\n<li>You want to pick the right providers for monitoring<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfea <strong>4. dotnet-counters ps<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Shows all .NET processes which can be monitored<\/strong><\/h3>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">dotnet-counters ps\n<\/code><\/span><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">1234  <span class=\"hljs-selector-tag\">Orders<\/span><span class=\"hljs-selector-class\">.Api<\/span>\n5678  <span class=\"hljs-selector-tag\">WorkerService1<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Use when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You don\u2019t know the PID<\/li>\n\n\n\n<li>You want to confirm your app is running<\/li>\n\n\n\n<li>You want to attach to the correct process<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcdd <strong>Slide-Ready Summary<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>dotnet-counters \u2013 Core Commands<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>What It Does<\/th><th>When to Use<\/th><\/tr><\/thead><tbody><tr><td><strong>monitor<\/strong><\/td><td>Shows <strong>live runtime metrics<\/strong> in console<\/td><td>Realtime troubleshooting<\/td><\/tr><tr><td><strong>collect<\/strong><\/td><td>Records metrics to a <strong>file<\/strong><\/td><td>Post-analysis \/ long runs<\/td><\/tr><tr><td><strong>list<\/strong><\/td><td>Shows all available counters<\/td><td>Discover providers\/counters<\/td><\/tr><tr><td><strong>ps<\/strong><\/td><td>Lists .NET processes<\/td><td>To find PID to attach<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Master Table: Important dotnet-counters Metrics (with Explanations &amp; Why They Matter)<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1\ufe0f\u20e3 <strong>System.Runtime \u2014 Core CLR Runtime Metrics<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>What It Means<\/th><th>Why It\u2019s Important for Performance<\/th><\/tr><\/thead><tbody><tr><td><strong>CPU Usage (%)<\/strong><\/td><td>CPU percentage used by the .NET process<\/td><td>Detects CPU bottlenecks; helps identify CPU-bound workloads, infinite loops, bad parallelism, or excessive processing.<\/td><\/tr><tr><td><strong>Allocation Rate (B\/sec)<\/strong><\/td><td>How fast your app allocates managed memory<\/td><td>High allocation rate \u2192 frequent GC \u2192 latency spikes. Crucial for diagnosing app churn, LINQ inefficiencies, and memory-heavy code.<\/td><\/tr><tr><td><strong>GC Heap Size (MB)<\/strong><\/td><td>Total memory currently used by the managed heap<\/td><td>Detects memory leaks, memory growth over time, and inefficient caching patterns.<\/td><\/tr><tr><td><strong>GC Committed Bytes (MB)<\/strong><\/td><td>Memory reserved by GC from OS<\/td><td>Helps understand total memory pressure; correlates with working set expansion.<\/td><\/tr><tr><td><strong>% Time in GC<\/strong><\/td><td>Percentage of time spent in garbage collection<\/td><td>High value = app is frequently pausing; leads to latency issues and poor throughput.<\/td><\/tr><tr><td><strong>Time paused by GC (ms\/sec)<\/strong><\/td><td>Actual stop-the-world pause time<\/td><td>High pause time directly causes slow API responses and jitter.<\/td><\/tr><tr><td><strong>Gen 0\/1\/2 GC Count<\/strong><\/td><td>Number of collections happening per second<\/td><td>High Gen0 = object churn. High Gen2 = severe performance issue because Gen2 GCs are expensive.<\/td><\/tr><tr><td><strong>Gen 0\/1\/2 Size<\/strong><\/td><td>Total bytes in each generation<\/td><td>Helps identify long-lived allocations, memory retention, and leaks.<\/td><\/tr><tr><td><strong>LOH Size (Large Object Heap)<\/strong><\/td><td>Memory used by objects \u226585 KB<\/td><td>LOH fragments memory; too big LOH increases GC cost. Critical for APIs that allocate large arrays\/JSON blobs.<\/td><\/tr><tr><td><strong>POH Size (Pinned Object Heap)<\/strong><\/td><td>Memory that GC cannot move<\/td><td>High POH = higher fragmentation + potential leaks. Important for interop-heavy systems.<\/td><\/tr><tr><td><strong>ThreadPool Thread Count<\/strong><\/td><td>Number of active worker threads<\/td><td>Too low \u2192 starvation. Too high \u2192 excessive context switching.<\/td><\/tr><tr><td><strong>ThreadPool Queue Length<\/strong><\/td><td>Work items waiting for a thread<\/td><td>If &gt;0 consistently \u2192 request queuing \u2192 latency spikes.<\/td><\/tr><tr><td><strong>ThreadPool Completed Work Items\/sec<\/strong><\/td><td>Work throughput<\/td><td>Helps measure workload intensity and server utilization.<\/td><\/tr><tr><td><strong>Lock Contention Count\/sec<\/strong><\/td><td>Threads waiting to enter locks<\/td><td>Indicates concurrency bottlenecks causing hangs and slowdowns.<\/td><\/tr><tr><td><strong>Exception Count\/sec<\/strong><\/td><td>Exceptions thrown each second<\/td><td>High exceptions degrade performance due to stack walking + GC pressure.<\/td><\/tr><tr><td><strong>Working Set (MB)<\/strong><\/td><td>Total memory used by the process<\/td><td>High working set may cause swapping or OOM kills in containers.<\/td><\/tr><tr><td><strong>IL Bytes Jitted \/ Methods Jitted<\/strong><\/td><td>Total methods compiled by JIT<\/td><td>High values over time = JIT warmup not complete; affects startup latency.<\/td><\/tr><tr><td><strong>Active Timers<\/strong><\/td><td>Number of active timer callbacks<\/td><td>Too many timers \u2192 excessive scheduling overhead.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2\ufe0f\u20e3 <strong>Microsoft.AspNetCore.Hosting \u2014 Request &amp; Application Metrics<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>What It Means<\/th><th>Why It Matters<\/th><\/tr><\/thead><tbody><tr><td><strong>Requests\/sec<\/strong><\/td><td>Incoming requests throughput<\/td><td>Measures system load; used to detect saturation and capacity.<\/td><\/tr><tr><td><strong>Current Requests<\/strong><\/td><td>In-flight HTTP requests<\/td><td>High values = backpressure or slow request handlers.<\/td><\/tr><tr><td><strong>Total Requests<\/strong><\/td><td>Cumulative number of served requests<\/td><td>Useful for verifying app activity during load tests.<\/td><\/tr><tr><td><strong>Failed Requests<\/strong><\/td><td>Number of failed requests<\/td><td>Identifies reliability\/stability issues.<\/td><\/tr><tr><td><strong>Request Queue Length<\/strong><\/td><td>Pending incoming requests<\/td><td>Queue &gt; 0 \u2192 server not keeping up \u2192 potential cascading failure.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3\ufe0f\u20e3 <strong>Microsoft-AspNetCore-Server-Kestrel \u2014 Server-Level Metrics<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Meaning<\/th><th>Why It Matters<\/th><\/tr><\/thead><tbody><tr><td><strong>Current Connections<\/strong><\/td><td>Active TCP connections<\/td><td>Detects overload, DDoS-like patterns, or connection leaks.<\/td><\/tr><tr><td><strong>Connection Queue Length<\/strong><\/td><td>Pending connections before they\u2019re accepted<\/td><td>High queue = server saturation.<\/td><\/tr><tr><td><strong>TLS Handshake Failures<\/strong><\/td><td>Failed SSL handshakes<\/td><td>Indicates certificate issues or client misconfigurations.<\/td><\/tr><tr><td><strong>Request Queue Length<\/strong><\/td><td>HTTP requests waiting to be processed<\/td><td>Early warning sign of API latency under load.<\/td><\/tr><tr><td><strong>Connections\/sec<\/strong><\/td><td>New incoming connections\/second<\/td><td>High churn can cause CPU spikes and port exhaustion.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4\ufe0f\u20e3 <strong>Microsoft.AspNetCore.Http.Connections \u2014 SignalR &amp; WebSockets<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Meaning<\/th><th>Why It Matters<\/th><\/tr><\/thead><tbody><tr><td><strong>Current Connections<\/strong><\/td><td>Active WebSocket\/SignalR connections<\/td><td>Helps size the real-time workload.<\/td><\/tr><tr><td><strong>Connections Started<\/strong><\/td><td>New connections opened<\/td><td>High rate = scaling pressure on real-time hubs.<\/td><\/tr><tr><td><strong>Connections Stopped<\/strong><\/td><td>Closed connections<\/td><td>Sharp increases indicate instabilities.<\/td><\/tr><tr><td><strong>Connections Timed Out<\/strong><\/td><td>Connections dropped unexpectedly<\/td><td>Indicates networking or idle-time issues.<\/td><\/tr><tr><td><strong>Connection Duration<\/strong><\/td><td>Avg time connections remain open<\/td><td>Useful for capacity planning.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5\ufe0f\u20e3 <strong>System.Net.Http \u2014 Outbound HTTP Client Metrics<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Meaning<\/th><th>Why It Matters<\/th><\/tr><\/thead><tbody><tr><td><strong>Requests Started\/sec<\/strong><\/td><td>Outbound calls initiated<\/td><td>Helps measure dependency load.<\/td><\/tr><tr><td><strong>Requests Failed\/sec<\/strong><\/td><td>Outbound failures<\/td><td>Useful for detecting flaky downstream services.<\/td><\/tr><tr><td><strong>Current HTTP\/1.1 Connections<\/strong><\/td><td>Active pooled connections<\/td><td>Helps identify connection pool exhaustion.<\/td><\/tr><tr><td><strong>HTTP\/2 Streams<\/strong><\/td><td>Streams in use<\/td><td>Critical for gRPC or HTTP\/2 workloads.<\/td><\/tr><tr><td><strong>DNS Lookup Duration<\/strong><\/td><td>Time taken for DNS resolution<\/td><td>Slow DNS = global latency issues.<\/td><\/tr><tr><td><strong>Sockets Queued<\/strong><\/td><td>Pending socket requests<\/td><td>Too many \u21d2 networking bottleneck.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6\ufe0f\u20e3 <strong>Microsoft.EntityFrameworkCore \u2014 Database &amp; Query Performance<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Meaning<\/th><th>Why It\u2019s Critical<\/th><\/tr><\/thead><tbody><tr><td><strong>Queries Executed\/sec<\/strong><\/td><td>Database query rate<\/td><td>Detects DB overload &amp; slow query patterns.<\/td><\/tr><tr><td><strong>Active DbContexts<\/strong><\/td><td>Number of active EF contexts<\/td><td>High values = context leaks or too many parallel queries.<\/td><\/tr><tr><td><strong>Command Execution Count<\/strong><\/td><td>DB commands executed<\/td><td>Measures DB workload intensity.<\/td><\/tr><tr><td><strong>Optimistic Concurrency Failures<\/strong><\/td><td>Version conflicts<\/td><td>Indicates concurrency problems &amp; row contention.<\/td><\/tr><tr><td><strong>Queries Compilation Events<\/strong><\/td><td>EF query compilation<\/td><td>High compilation rate = missing compiled query reuse \u2192 performance loss.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7\ufe0f\u20e3 <strong>Additional Important Diagnostic Signals<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Meaning<\/th><th>Why It&#8217;s Useful<\/th><\/tr><\/thead><tbody><tr><td><strong>GC Fragmentation %<\/strong><\/td><td>How fragmented the heap is<\/td><td>Fragmentation increases GC time &amp; reduces memory efficiency.<\/td><\/tr><tr><td><strong>GC Budget<\/strong><\/td><td>Target allocation for next GC<\/td><td>Helps understand upcoming GC cycles.<\/td><\/tr><tr><td><strong>JIT Time (ms\/sec)<\/strong><\/td><td>Time spent JIT-compiling code<\/td><td>Affects startup and \u201cwarm-up\u201d performance.<\/td><\/tr><tr><td><strong>Assemblies Loaded<\/strong><\/td><td>Number of loaded assemblies<\/td><td>Too many \u2192 high memory + startup time.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfaf <strong>Summary: Why These Metrics Matter<\/strong><\/h1>\n\n\n\n<p>This table covers <strong>all critical metrics<\/strong> for diagnosing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High CPU<\/li>\n\n\n\n<li>Memory leaks<\/li>\n\n\n\n<li>High GC pressure<\/li>\n\n\n\n<li>Large object allocations<\/li>\n\n\n\n<li>ThreadPool starvation<\/li>\n\n\n\n<li>Lock contention<\/li>\n\n\n\n<li>Slow database queries<\/li>\n\n\n\n<li>HTTP failures &amp; timeouts<\/li>\n\n\n\n<li>Real-time connection pressure<\/li>\n\n\n\n<li>Throughput &amp; latency degradation<\/li>\n\n\n\n<li>Container OOM kills<\/li>\n\n\n\n<li>Cold-start &amp; JIT issues<\/li>\n<\/ul>\n\n\n\n<p><strong>dotnet-counters<\/strong> is the <em>first tool<\/em> you should use during:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Load Testing<\/li>\n\n\n\n<li>Performance Engineering<\/li>\n\n\n\n<li>CPU\/Memory profiling<\/li>\n\n\n\n<li>Cloud production incidents<\/li>\n\n\n\n<li>GC or memory leak investigations<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2705 dotnet-counters \u2013 Command Reference (Explained Simply) When you run: You see 4 main commands: Below is a simple explanation for each. \ud83d\udfe6 1. dotnet-counters monitor Real-time monitoring (LIVE metrics)&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-54158","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=54158"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54158\/revisions"}],"predecessor-version":[{"id":54164,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54158\/revisions\/54164"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=54158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=54158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=54158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}