Performance Monitor (PerfMon) is Windows Server’s built-in tool for capturing, recording, and analysing performance data over time. While Task Manager shows you what is happening right now, Performance Monitor reveals trends, pinpoints performance degradation, and captures data from overnight or weekend periods when no one is watching. This guide covers how to use Performance Monitor and Data Collector Sets on Windows Server effectively.
Open Performance Monitor
Press Win + R and type perfmon.msc, or find it via Server Manager → Tools → Performance Monitor. The left panel shows Monitoring Tools, Data Collector Sets, and Reports.
Add Counters to the Live View
- Click Monitoring Tools → Performance Monitor
- Click the green + button to add counters
- Select a performance object and counter:
- Type a partial name in the search box to filter the long list
- Select the counter, then click Add >>
- Click OK — the counter graph appears in real time
Essential Counters to Monitor
CPU:
Processor(_Total)\% Processor Time— overall CPU load. Sustained above 80% needs investigation.Processor(_Total)\% Privileged Time— time spent in kernel mode. High values (above 20%) can indicate driver or hardware issues.System\Processor Queue Length— threads waiting for CPU time. Consistently above 2× the number of cores indicates CPU bottleneck.
Memory:
Memory\Available MBytes— free physical RAM. Alert if consistently below 500MB.Memory\Pages/sec— disk paging activity. Consistent values above 20 indicate memory pressure.Memory\Pool Nonpaged Bytes— kernel memory pool. Growing over time can indicate a kernel memory leak.
Disk:
PhysicalDisk(_Total)\% Disk Time— time the disk was busy. Consistently above 80% indicates a disk bottleneck.PhysicalDisk(_Total)\Avg. Disk Queue Length— requests waiting for disk. Above 2 per spindle indicates saturation.PhysicalDisk(_Total)\Avg. Disk sec/ReadandAvg. Disk sec/Write— latency in seconds. Good disks: under 20ms. SSD: under 5ms. Values above 50ms indicate a struggling disk.
Network:
Network Interface(*)\Bytes Total/sec— total network throughput per adapterNetwork Interface(*)\Current Bandwidth— link speed (for calculating utilisation percentage)
SQL Server (if applicable):
SQLServer:Buffer Manager\Page life expectancy— seconds a data page stays in memory. Below 300 indicates memory pressure on SQL Server.SQLServer:General Statistics\User Connections— active database connections
Create a Data Collector Set
A Data Collector Set records counter values to a log file over time — essential for diagnosing problems that occur outside business hours or capturing baseline performance data:
- In Performance Monitor, expand Data Collector Sets → User Defined
- Right-click → New → Data Collector Set
- Name it (e.g. “Server Baseline”) and choose Create manually
- Select Performance counter as the data type
- Add the counters you want to capture (CPU, memory, disk, network as above)
- Set the sample interval — 15 or 30 seconds is suitable for most monitoring. 5 seconds for intensive troubleshooting.
- Set the output file location (ensure the drive has space — a month of 30-second samples at typical counter counts is a few hundred MB)
- Click Finish
Schedule a Data Collector Set
- Right-click the Data Collector Set → Properties → Schedule tab
- Click Add and configure start time, days, and duration
- Under Stop Condition tab, set a maximum duration or file size to prevent unbounded log growth
For ongoing baseline monitoring, schedule the collector to run continuously with daily log rollover.
View Collected Data
- Under Reports → User Defined, expand your collector set name to see recorded sessions
- Double-click a report to open it in Performance Monitor — the graph shows your recorded data over the collection period
- Drag the time cursor to investigate specific periods
- Right-click the graph → Save As to export a view
Use the Built-In System Performance Report
For a quick automated analysis without manual counter configuration:
- Under Data Collector Sets → System → System Performance, right-click → Start
- It runs for 60 seconds, then generates a comprehensive HTML report automatically
- Find the report under Reports → System → System Performance
The report highlights the top resource consumers, wait statistics, and any resource bottlenecks detected — a good starting point for any performance investigation.
Performance Monitor via PowerShell
# Capture a specific counter value
(Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
# Sample multiple counters every 5 seconds, 12 times (1 minute of data)
Get-Counter -Counter "\Processor(_Total)\% Processor Time","\Memory\Available MBytes" -SampleInterval 5 -MaxSamples 12 | Export-Counter -Path "C:\Temp\perf.blg"