{"id":54178,"date":"2025-11-25T08:06:06","date_gmt":"2025-11-25T08:06:06","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=54178"},"modified":"2025-11-25T08:06:06","modified_gmt":"2025-11-25T08:06:06","slug":"resource-monitor-resmon-exe-lab-demo","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/resource-monitor-resmon-exe-lab-demo\/","title":{"rendered":"RESOURCE MONITOR (resmon.exe): Lab &amp; Demo"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\ud83c\udfaf Lab Objective<\/strong><\/h1>\n\n\n\n<p>By the end of this lab, you will be able to:<\/p>\n\n\n\n<p>\u2714 Launch and use Resource Monitor<br>\u2714 Analyze CPU, Memory, Disk, and Network usage for a .NET application<br>\u2714 Identify performance bottlenecks<br>\u2714 Detect high CPU, memory leaks, disk thrashing, and network issues<br>\u2714 Use Resource Monitor to troubleshoot real-time .NET app problems<\/p>\n\n\n\n<p>This lab is <strong>hands-on<\/strong>, and every step includes <strong>expected results + observations<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 0 \u2014 Prerequisites<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>Before starting:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 Windows 10\/11 or Windows Server<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 .NET 6 or .NET 7 runtime installed<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714 A sample .NET app (API, console, or background worker)<\/h3>\n\n\n\n<p><strong>If you don\u2019t have one<\/strong>, you can create a quick sample API:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">dotnet <span class=\"hljs-keyword\">new<\/span> webapi -n DemoApi\ncd DemoApi\ndotnet run\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This will run on:<br><strong><a href=\"http:\/\/localhost:5000\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:5000<\/a><\/strong> or <strong><a href=\"http:\/\/localhost:5241\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:5241<\/a><\/strong> (depending on your version)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 1 \u2014 Launch Resource Monitor<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Open ResMon<\/strong><\/h3>\n\n\n\n<p>Press:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Win + R \u2192 resmon\n<\/code><\/span><\/pre>\n\n\n<p>OR<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Ctrl + Shift + Esc \u2192 Task Manager \u2192 Performance \u2192 Open Resource Monitor\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Expected Output<\/strong><\/h3>\n\n\n\n<p>You see an interface with tabs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Overview<\/li>\n\n\n\n<li>CPU<\/li>\n\n\n\n<li>Memory<\/li>\n\n\n\n<li>Disk<\/li>\n\n\n\n<li>Network<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 2 \u2014 Monitor CPU Usage of .NET App<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1: Run your .NET application<\/strong><\/h2>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">dotnet run\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 2: Open Resource Monitor \u2192 CPU Tab<\/strong><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 3: Filter by the .NET process<\/strong><\/h2>\n\n\n\n<p>Look for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>dotnet.exe<\/strong><\/li>\n\n\n\n<li><strong>w3wp.exe<\/strong> (if IIS hosted)<\/li>\n\n\n\n<li>yourapp.exe (self-contained builds)<\/li>\n<\/ul>\n\n\n\n<p>Check these fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Image<\/strong><\/li>\n\n\n\n<li><strong>PID<\/strong><\/li>\n\n\n\n<li><strong>Threads<\/strong><\/li>\n\n\n\n<li><strong>CPU %<\/strong><\/li>\n\n\n\n<li><strong>Average CPU<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Simulate load<\/strong><\/h3>\n\n\n\n<p>Use a separate terminal:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">for<\/span> \/l %i <span class=\"hljs-keyword\">in<\/span> (<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1000<\/span>) <span class=\"hljs-keyword\">do<\/span> curl http:<span class=\"hljs-comment\">\/\/localhost:5000\/weatherforecast<\/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\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Or use Postman runner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Observe:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU usage rises<\/li>\n\n\n\n<li>Thread count increases<\/li>\n\n\n\n<li>Your .NET process moves to the top of the CPU list<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 5: Analyze Wait Chain for Deadlocks<\/strong><\/h3>\n\n\n\n<p>Right-click your .NET process \u2192<br><strong>Analyze Wait Chain<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Expected Result<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No wait chain = no deadlock<\/li>\n\n\n\n<li>If threads wait for each other \u2192 potential deadlock<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 3 \u2014 Memory Analysis for .NET App<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1: Open Memory tab<\/strong><\/h2>\n\n\n\n<p>Filter your .NET process.<\/p>\n\n\n\n<p>Look at:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Commit (KB)<\/strong><\/li>\n\n\n\n<li><strong>Working Set (KB)<\/strong><\/li>\n\n\n\n<li><strong>Private (KB)<\/strong><\/li>\n\n\n\n<li><strong>Shareable<\/strong><\/li>\n\n\n\n<li><strong>Hard Faults\/sec<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 2: Trigger .NET memory usage<\/strong><\/h2>\n\n\n\n<p>Modify API or run a loop:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">var<\/span> data = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;byte&#91;]&gt;();\n<span class=\"hljs-keyword\">for<\/span>(int i=<span class=\"hljs-number\">0<\/span>; i&lt;<span class=\"hljs-number\">50000<\/span>; i++)\n{\n    data.Add(<span class=\"hljs-keyword\">new<\/span> byte&#91;<span class=\"hljs-number\">1024<\/span> * <span class=\"hljs-number\">50<\/span>]); <span class=\"hljs-comment\">\/\/ 50 KB<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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>Run load test again.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Expected Observations<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Working Set increases<\/strong><\/li>\n\n\n\n<li><strong>Commit size increases<\/strong><\/li>\n\n\n\n<li><strong>Hard Faults\/sec spikes<\/strong> if system memory is low<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 3: Identify memory leak behavior<\/strong><\/h2>\n\n\n\n<p>If Working Set grows continuously without dropping \u2192 possible memory leak.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 4 \u2014 Disk I\/O Analysis for .NET<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>This is crucial for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logging-heavy applications<\/li>\n\n\n\n<li>APIs that write large files<\/li>\n\n\n\n<li>Upload\/download endpoints<\/li>\n\n\n\n<li>Apps with heavy DB operations<\/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>Step 1: Open Disk tab<\/strong><\/h2>\n\n\n\n<p>Filter by your <strong>dotnet.exe<\/strong> process.<\/p>\n\n\n\n<p>Observe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Read (B\/sec)<\/strong><\/li>\n\n\n\n<li><strong>Write (B\/sec)<\/strong><\/li>\n\n\n\n<li><strong>Total (B\/sec)<\/strong><\/li>\n\n\n\n<li><strong>Disk Queue Length<\/strong><\/li>\n\n\n\n<li><strong>Response Time<\/strong><\/li>\n\n\n\n<li><strong>File path<\/strong> being accessed<\/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>Step 2: Simulate Disk Load<\/strong><\/h2>\n\n\n\n<p>Create a .NET endpoint that writes files:<\/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\">&#91;HttpGet(<span class=\"hljs-string\">\"write\"<\/span>)]\n<span class=\"hljs-keyword\">public<\/span> IActionResult WriteDemo()\n{\n    System.IO.File.WriteAllText(<span class=\"hljs-string\">\"test_\"<\/span> + Guid.NewGuid() + <span class=\"hljs-string\">\".txt\"<\/span>, <span class=\"hljs-keyword\">new<\/span> string(<span class=\"hljs-string\">'A'<\/span>, <span class=\"hljs-number\">1000000<\/span>));\n    <span class=\"hljs-keyword\">return<\/span> Ok();\n}\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>Call it multiple times:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">for<\/span> \/l %i <span class=\"hljs-keyword\">in<\/span> (<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">200<\/span>) <span class=\"hljs-keyword\">do<\/span> curl http:<span class=\"hljs-comment\">\/\/localhost:5000\/write<\/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\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Expected Observations<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Disk write activity spikes<\/li>\n\n\n\n<li>Resource Monitor shows file names like:<br><code>C:\\path\\yourapp\\test_*.txt<\/code><\/li>\n\n\n\n<li><strong>Disk Queue Length<\/strong> increases<\/li>\n\n\n\n<li><strong>Response Time<\/strong> shows milliseconds \u2192 indicates I\/O latency<\/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>Interpretation<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High queue length \u2192 Disk bottleneck<\/li>\n\n\n\n<li>High response time \u2192 slow disk (SSD\/HDD issue)<\/li>\n\n\n\n<li>Heavy writes \u2192 Logging too much<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 5 \u2014 Network Analysis for .NET<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1: Go to Network Tab<\/strong><\/h2>\n\n\n\n<p>Filter by your .NET process.<\/p>\n\n\n\n<p>Observe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Send (B\/sec)<\/strong><\/li>\n\n\n\n<li><strong>Receive (B\/sec)<\/strong><\/li>\n\n\n\n<li><strong>Total bytes\/sec<\/strong><\/li>\n\n\n\n<li><strong>Remote Address<\/strong><\/li>\n\n\n\n<li><strong>Port<\/strong><\/li>\n\n\n\n<li><strong>TCP connections<\/strong><\/li>\n\n\n\n<li><strong>Failures<\/strong><\/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>Step 2: Simulate High Network Load<\/strong><\/h2>\n\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">for<\/span> \/l %i <span class=\"hljs-keyword\">in<\/span> (<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">300<\/span>) <span class=\"hljs-keyword\">do<\/span> curl http:<span class=\"hljs-comment\">\/\/localhost:5000\/weatherforecast<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Or:<\/p>\n\n\n\n<p>Use Postman runner (10\u2013100 requests\/sec).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Expected Observations<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Network usage increases<\/li>\n\n\n\n<li>You can see your API responding on port:\n<ul class=\"wp-block-list\">\n<li>5000<\/li>\n\n\n\n<li>5241<\/li>\n\n\n\n<li>custom hosted port<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>TCP connections show:\n<ul class=\"wp-block-list\">\n<li>Local Address<\/li>\n\n\n\n<li>Remote Address<\/li>\n\n\n\n<li>State (Established)<\/li>\n<\/ul>\n<\/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>Advanced Scenario<\/strong><\/h2>\n\n\n\n<p>If your .NET app calls external APIs, you can see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Outgoing IP<\/li>\n\n\n\n<li>Latency issues<\/li>\n\n\n\n<li>Failed connections<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 6 \u2014 Isolate and Focus on a Single Process<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>Resource Monitor allows <strong>FILTERING<\/strong> by process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Check the box next to dotnet.exe<\/strong><\/h3>\n\n\n\n<p>Now the entire UI filters:<\/p>\n\n\n\n<p>\u2714 CPU \u2192 Only your threads<br>\u2714 Disk \u2192 Only your files<br>\u2714 Network \u2192 Only your connections<br>\u2714 Memory \u2192 Only your segments<\/p>\n\n\n\n<p>This is <strong>the most powerful feature<\/strong> in Resource Monitor.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 7 \u2014 Detect Thread Starvation \/ Deadlocks<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1: CPU Tab \u2192 Expand Threads<\/strong><\/h2>\n\n\n\n<p>Look for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A single thread using high CPU<\/li>\n\n\n\n<li>Many threads blocked<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 2: Right-click \u2192 Analyze Wait Chain<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Expected<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>App may show:<br>\u201cOne or more threads are waiting on each other\u201d \u2192 Deadlock<\/li>\n<\/ul>\n\n\n\n<p>This helps catch:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>async\/await deadlocks<\/li>\n\n\n\n<li>database blocking<\/li>\n\n\n\n<li>file I\/O blocking<\/li>\n\n\n\n<li>network blocking<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 8 \u2014 Performance Optimization Decision Points<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>Using Resource Monitor, collect findings:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. CPU Bottleneck \u2192 Optimize<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reduce JSON serialization<\/li>\n\n\n\n<li>Optimize LINQ projections<\/li>\n\n\n\n<li>Use async I\/O<\/li>\n\n\n\n<li>Reduce heavy loops<\/li>\n\n\n\n<li>Add caching<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Memory Bottleneck \u2192 Optimize<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fix memory leaks<\/li>\n\n\n\n<li>Reduce LOH allocations<\/li>\n\n\n\n<li>Use pooling<\/li>\n\n\n\n<li>Dispose unmanaged resources<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Disk Bottleneck \u2192 Optimize<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reduce logging<\/li>\n\n\n\n<li>Use async disk I\/O<\/li>\n\n\n\n<li>Move logs to separate drive<\/li>\n\n\n\n<li>Optimize temp-file usage<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Network Bottleneck \u2192 Optimize<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add connection pooling<\/li>\n\n\n\n<li>Reduce large payloads<\/li>\n\n\n\n<li>Enable compression<\/li>\n\n\n\n<li>Optimize external API calls<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddea <strong>LAB 9 \u2014 Final Validation<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>After optimization:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Re-run load<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use curl\/Postman<\/li>\n\n\n\n<li>Generate real load<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Re-check Resource Monitor<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU should stabilize<\/li>\n\n\n\n<li>Disk writes reduced<\/li>\n\n\n\n<li>Hard faults minimized<\/li>\n\n\n\n<li>Network calls optimized<\/li>\n\n\n\n<li>Memory usage flattened<\/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\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>LAB END: Summary<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/h1>\n\n\n\n<p>After completing this lab, you can:<\/p>\n\n\n\n<p>\u2714 Use Resource Monitor to analyze:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>Memory<\/li>\n\n\n\n<li>Disk<\/li>\n\n\n\n<li>Network<\/li>\n<\/ul>\n\n\n\n<p>\u2714 Filter by .NET process<br>\u2714 Identify bottlenecks<br>\u2714 Detect deadlocks, file locks, port usage<br>\u2714 Optimize .NET application performance using real-time signals<\/p>\n\n\n\n<p>Resource Monitor is a <strong>real-time diagnostic powerhouse<\/strong> for Windows and crucial for effective <strong>.NET performance optimization<\/strong>.<\/p>\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>\ud83c\udfaf Lab Objective By the end of this lab, you will be able to: \u2714 Launch and use Resource Monitor\u2714 Analyze CPU, Memory, Disk, and Network usage for a .NET&#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-54178","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54178","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=54178"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54178\/revisions"}],"predecessor-version":[{"id":54179,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54178\/revisions\/54179"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=54178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=54178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=54178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}