{"id":54167,"date":"2025-11-25T07:31:40","date_gmt":"2025-11-25T07:31:40","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=54167"},"modified":"2026-02-21T08:29:05","modified_gmt":"2026-02-21T08:29:05","slug":"perfmon-performance-monitor-demo-lab","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/perfmon-performance-monitor-demo-lab\/","title":{"rendered":"PERFMON (Performance Monitor): Demo &amp; Lab"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"616\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27-1024x616.png\" alt=\"\" class=\"wp-image-54168\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27-1024x616.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27-300x181.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27-768x462.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27-1536x925.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/11\/image-27.png 1613w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Below is the <strong>definitive, step-by-step list of PerfMon counters<\/strong> you must add for <strong>.NET \/ ASP.NET Core \/ API \/ Microservices<\/strong> performance optimization.<\/p>\n\n\n\n<p>This is the same checklist used in <strong>enterprise performance engineering<\/strong>, <strong>load testing<\/strong>, and <strong>production diagnostics<\/strong>.<\/p>\n\n\n\n<p>I will give you:<\/p>\n\n\n\n<p>\u2714 Exact counters<br>\u2714 In step-by-step order<br>\u2714 Why each counter matters<br>\u2714 Which ones are optional vs mandatory<br>\u2714 What values are considered \u201cbad\u201d<\/p>\n\n\n\n<p>This is your <strong>final PerfMon Counter Checklist<\/strong> for .NET performance.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\"><strong>STEP-BY-STEP: Add These PerfMon Counters for .NET Application Performance Optimization<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\ud83d\udd35 STEP 1 \u2014 Add Essential CPU Counters (Mandatory)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Processor<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>% Processor Time \u2014 _Total<\/strong><\/li>\n\n\n\n<li><strong>% Privileged Time \u2014 _Total<\/strong><\/li>\n\n\n\n<li><strong>% Interrupt Time<\/strong><\/li>\n\n\n\n<li><strong>Processor Queue Length<\/strong> (from System)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Process (for your app)<\/strong><\/h3>\n\n\n\n<p>Select instance:<br>\u27a1 <strong>dotnet<\/strong>, <strong>w3wp<\/strong>, or <strong>yourapp.exe<\/strong><\/p>\n\n\n\n<p>Add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>% Processor Time<\/strong><\/li>\n\n\n\n<li><strong>Thread Count<\/strong><\/li>\n\n\n\n<li><strong>Handle Count<\/strong><\/li>\n\n\n\n<li><strong>Private Bytes<\/strong><\/li>\n\n\n\n<li><strong>Working Set<\/strong><\/li>\n\n\n\n<li><strong>IO Data Bytes\/sec<\/strong><\/li>\n\n\n\n<li><strong>IO Read Bytes\/sec<\/strong><\/li>\n\n\n\n<li><strong>IO Write Bytes\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Why CPU counters matter<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detect CPU saturation (&gt;80%)<\/li>\n\n\n\n<li>Find thread pool starvation<\/li>\n\n\n\n<li>Detect infinite loops, heavy JSON serialization, LINQ misuse<\/li>\n\n\n\n<li>Detect high kernel (privileged) usage \u2192 drivers, encryption, networking<\/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\"><strong>\ud83d\udfe3 STEP 2 \u2014 Add Memory Counters (Mandatory)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Memory<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Available MBytes<\/strong><\/li>\n\n\n\n<li><strong>% Committed Bytes in Use<\/strong><\/li>\n\n\n\n<li><strong>Pages\/sec<\/strong><\/li>\n\n\n\n<li><strong>Page Reads\/sec<\/strong><\/li>\n\n\n\n<li><strong>Cache Faults\/sec<\/strong><\/li>\n\n\n\n<li><strong>Committed Bytes<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Process (your app)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Private Bytes<\/strong> (memory leak indicator)<\/li>\n\n\n\n<li><strong>Virtual Bytes<\/strong><\/li>\n\n\n\n<li><strong>Working Set<\/strong><\/li>\n\n\n\n<li><strong>Page Faults\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Why Memory counters matter<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify memory leaks<\/li>\n\n\n\n<li>Detect high paging \u2192 application slowdown<\/li>\n\n\n\n<li>Understand GC pressure<\/li>\n\n\n\n<li>Identify large object allocations<\/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\"><strong>\ud83d\udfe2 STEP 3 \u2014 Add Disk I\/O Counters (Mandatory)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>PhysicalDisk<\/strong><\/h3>\n\n\n\n<p>(_Total)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Avg. Disk Queue Length<\/strong><\/li>\n\n\n\n<li><strong>Avg. Disk sec\/Read<\/strong><\/li>\n\n\n\n<li><strong>Avg. Disk sec\/Write<\/strong><\/li>\n\n\n\n<li><strong>Disk Reads\/sec<\/strong><\/li>\n\n\n\n<li><strong>Disk Writes\/sec<\/strong><\/li>\n\n\n\n<li><strong>Current Disk Queue Length<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>LogicalDisk<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>% Free Space<\/strong><\/li>\n\n\n\n<li><strong>Free Megabytes<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Why disk counters matter<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify disk bottlenecks<\/li>\n\n\n\n<li>Troubleshoot long API latency caused by slow file or database I\/O.<\/li>\n\n\n\n<li>Detect heavy logging or temp file writes<\/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\"><strong>\ud83d\udfe1 STEP 4 \u2014 Add Network Counters (Mandatory for API\/Web App)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Network Interface<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bytes Total\/sec<\/strong><\/li>\n\n\n\n<li><strong>Bytes Received\/sec<\/strong><\/li>\n\n\n\n<li><strong>Bytes Sent\/sec<\/strong><\/li>\n\n\n\n<li><strong>Output Queue Length<\/strong><\/li>\n\n\n\n<li><strong>Packets\/sec<\/strong><\/li>\n\n\n\n<li><strong>Packets Outbound Errors<\/strong><\/li>\n\n\n\n<li><strong>Packets Received Errors<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>TCPv4<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Connections Established<\/strong><\/li>\n\n\n\n<li><strong>Connection Failures<\/strong><\/li>\n\n\n\n<li><strong>Segments Retransmitted\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Why network counters matter<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Understand throughput<\/li>\n\n\n\n<li>Detect API congestion<\/li>\n\n\n\n<li>Detect retransmissions (network instability)<\/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\"><strong>\ud83d\udd34 STEP 5 \u2014 Add .NET CLR Counters (CRITICAL for .NET Performance)<\/strong><\/h1>\n\n\n\n<p>\u27a1 In PerfMon UI, expand:<br><strong>\u201c.NET CLR Memory\u201d<\/strong><br><strong>\u201c.NET CLR Exceptions\u201d<\/strong><br><strong>\u201c.NET CLR Jit\u201d<\/strong><br><strong>\u201c.NET CLR LocksAndThreads\u201d<\/strong><br><strong>\u201c.NET CLR Networking\u201d<\/strong><\/p>\n\n\n\n<p>Select your instance:<br><strong>dotnet<\/strong>, <strong>w3wp<\/strong>, or your application name.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udf40 .NET CLR MEMORY (Very Important)<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Add these:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>% Time in GC<\/strong><\/li>\n\n\n\n<li><strong>Gen 0 Collections<\/strong><\/li>\n\n\n\n<li><strong>Gen 1 Collections<\/strong><\/li>\n\n\n\n<li><strong>Gen 2 Collections<\/strong> \ud83d\udd25<\/li>\n\n\n\n<li><strong>Large Object Heap Size<\/strong> \ud83d\udd25<\/li>\n\n\n\n<li><strong># Bytes in all Heaps<\/strong><\/li>\n\n\n\n<li><strong>Promoted Memory\/sec<\/strong><\/li>\n\n\n\n<li><strong>Finalization Survivors<\/strong><\/li>\n\n\n\n<li><strong>GC Handles<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Interpretation:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Counter<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td>% Time in GC &gt; 15%<\/td><td>Too much GC blocking = slow app<\/td><\/tr><tr><td>Frequent Gen 2 GC<\/td><td>Memory pressure \/ large objects<\/td><\/tr><tr><td>High LOH size<\/td><td>Large object allocations causing fragmentation<\/td><\/tr><tr><td>High Promoted MB\/sec<\/td><td>Short-lived objects living too long<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udf40 .NET CLR EXCEPTIONS<\/strong><\/h2>\n\n\n\n<p>Add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong># of Exceptions Thrown\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<p>This indicates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poor coding practices<\/li>\n\n\n\n<li>Bad error handling<\/li>\n\n\n\n<li>Hidden exceptions killing performance<\/li>\n<\/ul>\n\n\n\n<p>If &gt; 100\/sec consistently \u2192 WRONG code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udf40 .NET CLR LOCKS &amp; THREADS<\/strong><\/h2>\n\n\n\n<p>Add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong># of current logical Threads<\/strong><\/li>\n\n\n\n<li><strong># of current physical Threads<\/strong><\/li>\n\n\n\n<li><strong>Contention Rate\/sec<\/strong><\/li>\n\n\n\n<li><strong>Queue Length<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Indicates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Thread pool starvation<\/li>\n\n\n\n<li>Async deadlocks<\/li>\n\n\n\n<li>High locking contention<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83c\udf40 .NET CLR JIT<\/strong><\/h2>\n\n\n\n<p>Add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>% Time in JIT<\/strong><\/li>\n\n\n\n<li><strong>IL Bytes Jitted\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<p>JIT issues appear on:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cold starts<\/li>\n\n\n\n<li>Large reflection \/ dynamic LINQ usage<\/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\"><strong>\ud83d\udfe4 STEP 6 \u2014 Add ASP.NET \/ IIS Counters (If Web App or API)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>ASP.NET Applications<\/strong><\/h3>\n\n\n\n<p>(Select your app pool)<\/p>\n\n\n\n<p>Add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Requests\/Sec<\/strong><\/li>\n\n\n\n<li><strong>Requests Queued<\/strong><\/li>\n\n\n\n<li><strong>Requests Rejected<\/strong><\/li>\n\n\n\n<li><strong>Request Execution Time<\/strong><\/li>\n\n\n\n<li><strong>Pipeline Instance Count<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>ASP.NET<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Application Restarts<\/strong><\/li>\n\n\n\n<li><strong>Worker Process Restarts<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Web Service<\/strong><\/h3>\n\n\n\n<p>(For old .NET Framework)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Total Method Requests\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>WinHTTP Proxy\/Service<\/strong><\/h3>\n\n\n\n<p>If using HttpClient extensively.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\ud83d\udd35 STEP 7 \u2014 Add Kestrel &amp; Hosting Counters (.NET Core Self-hosted)<\/strong><\/h1>\n\n\n\n<p>If running on Kestrel (non-IIS):<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>ASP.NET Core Hosting<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Current Requests<\/strong><\/li>\n\n\n\n<li><strong>Requests\/sec<\/strong><\/li>\n\n\n\n<li><strong>Request Queue Length<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 <strong>Kestrel<\/strong><\/h3>\n\n\n\n<p>(Available in dotnet counters, but PerfMon may expose via EventSource)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Connection queue length<\/strong><\/li>\n\n\n\n<li><strong>Active connections<\/strong><\/li>\n\n\n\n<li><strong>TLS handshake duration<\/strong><\/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\"><strong>\ud83d\udfe3 STEP 8 \u2014 Add SQL Server Counters (If Your App Uses DB)<\/strong><\/h1>\n\n\n\n<p>Category: <strong>SQLServer:SQL Statistics<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Batch Requests\/sec<\/strong><\/li>\n\n\n\n<li><strong>Compilations\/sec<\/strong><\/li>\n\n\n\n<li><strong>Re-Compilations\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Category: <strong>SQLServer:Buffer Manager<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Buffer cache hit ratio<\/strong><\/li>\n\n\n\n<li><strong>Page life expectancy (PLE)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Category: <strong>SQLServer:General Statistics<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>User Connections<\/strong><\/li>\n\n\n\n<li><strong>Processes blocked<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Category: <strong>SQLServer:Wait Statistics<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lock waits\/sec<\/strong><\/li>\n\n\n\n<li><strong>Latch waits\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<p>These help detect:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Query bottlenecks<\/li>\n\n\n\n<li>High CPU SQL queries<\/li>\n\n\n\n<li>Plan cache issues<\/li>\n\n\n\n<li>Memory pressure<\/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\">\ud83c\udfaf <strong>FINAL: Complete List (Copy-Paste Checklist)<\/strong><\/h1>\n\n\n\n<p>Here is the <strong>single list<\/strong> you can paste into training material:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 CPU<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Processor \u2192 % Processor Time (_Total)<\/li>\n\n\n\n<li>Processor \u2192 % Privileged Time<\/li>\n\n\n\n<li>Processor \u2192 % Interrupt Time<\/li>\n\n\n\n<li>System \u2192 Processor Queue Length<\/li>\n\n\n\n<li>Process(dotnet\/w3wp\/app.exe) \u2192 % Processor Time<\/li>\n\n\n\n<li>Thread Count<\/li>\n\n\n\n<li>Handle Count<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 Memory<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memory \u2192 Available MBytes<\/li>\n\n\n\n<li>Memory \u2192 % Committed Bytes<\/li>\n\n\n\n<li>Memory \u2192 Pages\/sec<\/li>\n\n\n\n<li>Process \u2192 Private Bytes<\/li>\n\n\n\n<li>Process \u2192 Page Faults\/sec<\/li>\n\n\n\n<li>Process \u2192 Working Set<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 Disk<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avg. Disk Queue Length<\/li>\n\n\n\n<li>Avg. Disk sec\/Read<\/li>\n\n\n\n<li>Avg. Disk sec\/Write<\/li>\n\n\n\n<li>Disk Reads\/sec<\/li>\n\n\n\n<li>Disk Writes\/sec<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 Network<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bytes Total\/sec<\/li>\n\n\n\n<li>TCP Retransmissions\/sec<\/li>\n\n\n\n<li>Connections Established<\/li>\n\n\n\n<li>Packets Errors<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 .NET CLR Memory<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>% Time in GC<\/li>\n\n\n\n<li>Gen 0\/1\/2 Collections<\/li>\n\n\n\n<li>Promoted MB\/sec<\/li>\n\n\n\n<li>Bytes in All Heaps<\/li>\n\n\n\n<li>LOH Size<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 .NET CLR Exceptions<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Exceptions\/sec<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 .NET CLR LocksAndThreads<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Contention Rate\/sec<\/li>\n\n\n\n<li>Logical Threads<\/li>\n\n\n\n<li>Physical Threads<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 ASP.NET \/ Hosting<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Requests\/sec<\/li>\n\n\n\n<li>Current Requests<\/li>\n\n\n\n<li>Request Queue Length<\/li>\n\n\n\n<li>Request Execution Time<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u2714 SQL Server<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Batch Requests\/sec<\/li>\n\n\n\n<li>SQL Compilations\/sec<\/li>\n\n\n\n<li>SQL Re-compilations\/sec<\/li>\n\n\n\n<li>Buffer Cache Hit Ratio<\/li>\n\n\n\n<li>Page Life Expectancy<\/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>Below is the definitive, step-by-step list of PerfMon counters you must add for .NET \/ ASP.NET Core \/ API \/ Microservices performance optimization. This is the same checklist used in&#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-54167","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54167","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=54167"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"predecessor-version":[{"id":59883,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54167\/revisions\/59883"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}