Disk saturation is a common cause of sudden slowness on Windows, especially during large file copies, antivirus scans, updates, and database or VM workloads. Watching disk I/O highlights when storage throughput or latency becomes the limiting factor instead of CPU or memory.
Built-in tools expose disk activity by reading counters from the storage stack and attributing work back to processes. Task Manager provides a fast per-disk snapshot (active time, read/write rate, and response time), Resource Monitor breaks I/O down by process and file, and Performance Monitor (perfmon) graphs disk counters over time to reveal sustained latency, queueing, and throughput limits.
Disk metrics are influenced by controller and filesystem caching, encryption, and virtualization layers, so a “busy” graph can reflect a virtual disk or storage pool rather than a single physical device. Sampling too aggressively or adding many counters can add overhead on already stressed systems, so keeping the counter set small during incident response improves signal quality. Administrative privileges may be required to view full process details and file paths when attributing I/O.
Steps to monitor disk I/O in Windows:
- Open Task Manager using Ctrl + Shift + Esc.

- Click More details if Task Manager opens in compact mode.

- Open the Performance tab.
The Performance view shows real-time disk activity per device.
- Select the target Disk to view Active time, Read speed, Write speed, and Average response time.
Active time near 100% with low throughput often indicates latency or queueing rather than raw bandwidth limits.
- Click Open Resource Monitor.

- Open the Disk tab in Resource Monitor.
Response Time (ms) and Disk Queue Length help confirm whether waits are caused by storage latency.
- Sort Processes with Disk Activity by Total (B/sec) to identify the top disk I/O processes.
Check Read (B/sec) and Write (B/sec) to see whether the load is read-heavy or write-heavy.
- Open the Run dialog using Win + R.

- Start Performance Monitor by running perfmon.

- Click the green + button to add counters.

- Select PhysicalDisk as the performance object.

- Select counters such as Disk Read Bytes/sec, Disk Write Bytes/sec, Avg. Disk sec/Read, Avg. Disk sec/Write, and Current Disk Queue Length.
Avg. Disk sec/Read and Avg. Disk sec/Write are latency values in seconds per operation, so 0.020 equals about 20 ms.
- Choose the target disk instance and click Add ».
Use a specific instance (for example, a disk matching the busy drive) instead of (_Total) when isolating a single device.
- Click OK to begin graphing the selected counters.

- Sample disk transfer rate from the command line with PowerShell and Get-Counter.
PS C:\> Get-Counter -Counter "\PhysicalDisk(*)\Disk Transfers/sec" -SampleInterval 1 -MaxSamples 10 Timestamp CounterSamples --------- -------------- 12/22/2025 10:15:01 AM \\COMPUTER01\PhysicalDisk(0 C:)\Disk Transfers/sec : 18.0 \\COMPUTER01\PhysicalDisk(1 D:)\Disk Transfers/sec : 0.0 \\COMPUTER01\PhysicalDisk(_Total)\Disk Transfers/sec : 18.0 ##### snipped #####
-SampleInterval 1 and -MaxSamples 10 capture about 10 seconds of per-disk activity.
- Confirm spikes in Avg. Disk sec/Read, Avg. Disk sec/Write, or Current Disk Queue Length align with the same disk and top process shown in Resource Monitor.

- Use Process Explorer to add per-process I/O columns when deeper attribution is needed.
Process Explorer can expose I/O totals and rates per process when built-in views are insufficient.
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.
