Performance Troubleshooting

Windows 11 Troubleshooting & Administration

Chapter 3 · Performance Troubleshooting

Chapter 1 introduced Task Manager and Resource Monitor as general-purpose tools; Chapter 2 added Event Viewer's own historical dimension. This chapter puts all three to work specifically on performance problems, adds a fourth tool built for logging performance over time rather than watching it live, and gives an honest comparison against Linux Performance Tuning's own, very differently organized toolset.

Task Manager's Performance Tab — Reading It Correctly

Four resource graphs, each measuring something genuinely different: CPU (utilization percentage, speed, process/thread/handle counts), Memory (in use vs. available, committed, cached), Disk (active time percentage and read/write throughput), and Network (send/receive throughput per adapter).

"100% Disk" doesn't mean what most people assume
The Disk graph's headline percentage measures active time — the fraction of time the disk had at least one outstanding request — not raw throughput. A slow drive handling a single, small, queued request can show 100% active time while transferring only a trickle of actual data. Seeing "100% Disk" and assuming the drive itself has failed, rather than checking the actual MB/s figure right alongside it, is a genuinely common misdiagnosis.

Resource Monitor's Memory Tab — Hard Faults, Not Just Percentage Used

High memory usage alone doesn't necessarily mean a machine is struggling — Windows deliberately caches aggressively, and "available" memory being low is often just unused cache ready to be reclaimed instantly. The more reliable indicator of real memory pressure is Hard Faults/sec, visible in Resource Monitor's Memory tab: a hard fault means data had to be read back from disk because it had been paged out, a genuinely expensive operation and a much more direct sign of insufficient memory than the raw usage percentage alone.

Performance Monitor — Logging Over Time, Not Just Watching Live

Task Manager and Resource Monitor both show a live snapshot — neither one is built to answer "what was happening at 3 AM last night when this machine locked up." Performance Monitor (perfmon.exe) solves that with Data Collector Sets — a defined group of performance counters logged to disk continuously or on a schedule, reviewable afterward regardless of whether anyone was watching when the problem actually occurred.

ViewBest for
Task ManagerLive snapshot, high-levelA quick first look, ending a frozen app
Resource MonitorLive snapshot, per-process detailIdentifying exactly which process/file/connection is responsible right now
Performance MonitorLogged over time, via Data Collector SetsIntermittent or overnight problems nobody was watching happen live

A Worked Example — Finding a Real Resource Hog

Task Manager's Performance tab shows Disk at a sustained 100% active time, but the throughput figure alongside it is only a few hundred KB/s — the exact misleading pattern this chapter's own warn-box named. Opening Resource Monitor's Disk tab and sorting by IOPS (rather than raw throughput) reveals one process issuing a huge number of tiny read requests. Cross-referencing its PID against Task Manager's Details tab (Chapter 1) identifies the exact application; checking Event Viewer (Chapter 2) around the same timestamp turns up a warning from that same app about a corrupted local cache file it's been repeatedly trying, and failing, to read.

An Honest Contrast With Linux Performance Tuning

Linux Performance Tuning covers a CLI-first toolset — top/htop, iostat, vmstat — reflecting Linux's own general command-line-centric culture. Windows's equivalent tools are GUI-first by default, though real CLI/scriptable equivalents do exist: typeperf and PowerShell's own Get-Counter cmdlet (Chapter 10 of Windows 11 Fundamentals) can capture the exact same underlying performance counters Performance Monitor's GUI displays, entirely from a script — genuinely useful for automated monitoring, just not the default first tool most Windows users or documentation reach for.

A scriptable bridge between the two philosophies
Get-Counter '\Processor(_Total)\% Processor Time' pulls the same live CPU figure Task Manager's own graph shows, directly in PowerShell — a genuinely useful middle ground when a quick, scriptable check is needed without opening a GUI tool at all.

Hands-On Exercises

Exercise 1

A user reports "100% disk usage" in Task Manager and assumes their drive is failing, but transfer speeds shown alongside it are very low. Using this chapter's own warn-box, explain what's actually being measured and why the assumption may be wrong.

📄 View solution
Exercise 2

A machine has 90% memory usage shown in Task Manager but feels perfectly responsive. Explain why this alone isn't proof of a real memory problem, and what a more reliable indicator would be.

📄 View solution
Exercise 3

A machine slows down every night around 3 AM, but nobody is available to watch Task Manager at that time. Explain which tool from this chapter is actually built for this scenario, and why Task Manager and Resource Monitor alone aren't sufficient.

📄 View solution

Chapter 3 Quick Reference

  • Task Manager's "100% Disk" measures active time, not throughput — check the actual MB/s figure too
  • Hard Faults/sec (Resource Monitor) is a more reliable memory-pressure signal than raw usage percentage
  • Performance Monitor and its Data Collector Sets log counters over time — the tool for problems nobody was watching happen live
  • A real resource-hog investigation chains Task Manager → Resource Monitor → PID → Event Viewer
  • Windows tools are GUI-first by default, unlike Linux Performance Tuning's own CLI-first culture — though Get-Counter/typeperf bridge the two
  • Next chapter: The Registry