> ## Documentation Index
> Fetch the complete documentation index at: https://help.freakhosting.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Monitor Windows Server Performance

> Monitor Windows Server performance: Task Manager for a quick look, Resource Monitor to find the busy process, Performance Monitor and Get-Counter for logs.

To monitor Windows Server performance, open **Task Manager** (`Ctrl+Shift+Esc`) for a quick view of CPU, memory, disk and network, then **Resource Monitor** (`resmon`) to see which process uses each resource. For history, use **Performance Monitor** (`perfmon /sys`) or PowerShell: `Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 12` samples CPU every 5 seconds for one minute.

| Difficulty | Time | Works on | Needs |
| - | - | - | - |
| Beginner | 15 minutes | Windows Server 2019, 2022 and 2025 (Desktop Experience) | An administrator account |

## Before you start

* [Connect with Remote Desktop](https://help.freakhosting.com/portals/other/how-to-connect-to-windows-server-with-remote-desktop.md) as an administrator.
* Run PowerShell **as administrator**: some performance counter sets are only visible in an elevated session.
* Counter names below are the English names. On a server installed in another display language, the names are localised.

## Which Windows tool should I use?

| Tool | Open with | Best for |
| - | - | - |
| **Task Manager** | `Ctrl+Shift+Esc` or `taskmgr` | A quick look: is anything at 100%? |
| **Resource Monitor** | `resmon` or `perfmon /res` | Which process is using CPU, memory, disk or network right now |
| **Performance Monitor** | `perfmon /sys` | Live graphs of any counter, and logging over time |
| **Reliability Monitor** | `perfmon /rel` | Crashes, failed updates and errors by day |
| **Get-Counter / typeperf** | PowerShell or Command Prompt | Scripted checks and CSV logs |

## How to check performance in Task Manager

**1. Open Task Manager**

Press `Ctrl+Shift+Esc`. In a Remote Desktop session `Ctrl+Alt+End` opens the security screen, from which you can also start it. Click **More details** if you only see a short list.

**2. Read the Performance tab**

Click **Performance**. **CPU**, **Memory**, each **Disk** and **Ethernet** have a live graph. Under **Memory**, check **Available**: that is what programs can still use.

**3. Find the busy process**

Click **Details** (or **Processes**) and click the **CPU** or **Memory** column header to sort. The top entry is your biggest user.

## How to find the cause in Resource Monitor

Run `resmon` from the Start menu, the Run box (`Win+R`) or PowerShell.

| Tab | Look at |
| - | - |
| **CPU** | Sort **Processes** by **Average CPU**. **Services** shows which Windows service a `svchost.exe` belongs to |
| **Memory** | **Commit** and **Working Set** per process; the bar at the bottom shows **In Use**, **Standby** and **Free** |
| **Disk** | **Disk Activity** shows which files each process reads and writes; **Storage** shows **Disk Queue Length** |
| **Network** | **TCP Connections** and **Listening Ports** per process |

Tick a process's box at the top of a tab to filter every other panel to that process.

## How to log performance counters with Performance Monitor

**1. Open Performance Monitor**

Run `perfmon /sys`. The graph starts with `% Processor Time`.

**2. Add counters**

Click the green **+** (Add Counters), choose a counter set and counter, select an instance (such as `_Total`) and click **Add**, then **OK**.

**3. Run a built-in health report**

For a one-off check of the whole server, run `perfmon /report`. It starts the **System Diagnostics** data collector set and shows a report of the results, with any warnings at the top.

Useful counters:

| Counter | What it shows | Watch for |
| - | - | - |
| `\Processor(_Total)\% Processor Time` | Total CPU use | Sustained values near 100 |
| `\System\Processor Queue Length` | Threads waiting for CPU | Persistently higher than your core count |
| `\Memory\Available MBytes` | Free memory for programs | Steadily falling towards 0 |
| `\Memory\Pages/sec` | Pages read from or written to disk to resolve memory faults | Sustained high values together with low available memory |
| `\PhysicalDisk(_Total)\Avg. Disk sec/Read` and `\…\Avg. Disk sec/Write` | Time per disk operation | Rising latency during slowdowns |
| `\Network Interface(*)\Bytes Total/sec` | Network throughput per adapter | Traffic you can't explain |

## How to check performance with PowerShell

Sample CPU every 5 seconds, 12 times (one minute):

```powershell theme={null}
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 12
```

Check several counters at once:

```powershell theme={null}
Get-Counter -Counter "\Processor(_Total)\% Processor Time","\Memory\Available MBytes","\System\Processor Queue Length"
```

List the 10 processes that have used the most CPU time since they started, with memory (working set) in MB:

```powershell theme={null}
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU, @{Name="WS_MB";Expression={[math]::Round($_.WS/1MB)}}
```

`CPU` here is total processor seconds, not a current percentage, so a long-running service can top the list while idle. Use Resource Monitor or `Get-Counter "\Process(*)\% Processor Time"` for current use.

List available counter sets:

```powershell theme={null}
Get-Counter -ListSet * | Sort-Object CounterSetName | Format-Table CounterSetName, CounterSetType -AutoSize
```

## How to log counters to a CSV file

`typeperf` writes samples to a file you can open in Excel:

```powershell theme={null}
typeperf "\Processor(_Total)\% Processor Time" "\Memory\Available MBytes" -si 15 -sc 240 -o C:\PerfLogs\server-perf.csv
```

This takes a sample every 15 seconds, 240 times (one hour). CSV is the default format. Create `C:\PerfLogs` first if it doesn't exist.

> [!NOTE]
>
> Leaving Performance Monitor or a log running for days fills the disk. Set a sample count with `-sc`, or delete old logs. For alerts when the server stops responding, monitor it from outside: see [email alerts when your server goes down](https://help.freakhosting.com/portals/other/how-to-get-email-alerts-when-your-server-goes-down.md).

## How to check it worked

`Get-Counter` should print a timestamp and a value for each counter. If you see `The specified object was not found on the computer`, the counter name is wrong or localised; list the real names with `Get-Counter -ListSet *`.

## Frequently asked questions

### Why does Windows Server show high memory use when nothing is running?

Windows keeps recently used files in **Standby** memory and frees it when programs need it. Check **Available** in Task Manager or `\Memory\Available MBytes`, not just **In Use**.

### What is using my CPU on Windows Server?

Sort Task Manager's **Details** tab or Resource Monitor's **CPU** tab by CPU. For common causes (Windows Update, Defender scans, `svchost.exe`), see [fix high CPU usage on Windows Server](https://help.freakhosting.com/portals/other/how-to-fix-high-cpu-usage-on-windows-server.md).

### Does Get-Counter work in PowerShell 7?

Yes. Microsoft reintroduced `Get-Counter` in PowerShell 7, and it is also in Windows PowerShell 5.1. It only works on Windows.

### Can I see past performance?

Only if you were logging it. Start a `typeperf` or Performance Monitor log now, and use Reliability Monitor (`perfmon /rel`) and [Event Viewer](https://help.freakhosting.com/portals/other/how-to-use-event-viewer-to-find-errors.md) for past crashes. On a VPS, the [VPS Panel graphs](https://help.freakhosting.com/portals/vps-panel/how-to-monitor-vps-resource-usage.md) show CPU, memory, disk and network history.

## Related guides

> [card] [VPS and dedicated server guides](https://help.freakhosting.com/portals/other/vps-and-dedicated-server-guides.md)
>
> Every server guide in one place.

> [card] [Fix high CPU on Windows Server](https://help.freakhosting.com/portals/other/how-to-fix-high-cpu-usage-on-windows-server.md)
>
> Find and stop the cause.

> [card] [Fix a slow Windows Server](https://help.freakhosting.com/portals/other/how-to-fix-windows-server-running-slow.md)
>
> Step-by-step troubleshooting.

> [card] [Use Event Viewer](https://help.freakhosting.com/portals/other/how-to-use-event-viewer-to-find-errors.md)
>
> Find errors and crashes.

> [card] [PowerShell basics](https://help.freakhosting.com/portals/other/how-to-use-powershell-on-windows-server.md)
>
> Everyday server commands.

> [card] [VPS Panel resource graphs](https://help.freakhosting.com/portals/vps-panel/how-to-monitor-vps-resource-usage.md)
>
> History from outside the server.

***

> [!NOTE]
>
> **Checked against Microsoft Learn: [Get-Counter](https://learn.microsoft.com/powershell/module/microsoft.powershell.diagnostics/get-counter), [perfmon](https://learn.microsoft.com/windows-server/administration/windows-commands/perfmon) and [typeperf](https://learn.microsoft.com/windows-server/administration/windows-commands/typeperf)** on 4 November 2026. Windows commands were not run in our test environment. Menu names can differ slightly between Windows Server releases.

> [!NOTE]
>
> ### Need Extra Help?
>
> If you encounter any issues, our support team is ready to assist:
>
> * **Live Chat:** Quick assistance via our website.
> * **Support Ticket:** [Open a Ticket](https://freakhosting.com/clientarea/submitticket.php)
> * **Discord:** [Join our Community](https://discord.gg/freakhosting)
> * **Email:** [support@freakhosting.com](mailto:support@freakhosting.com)

> [!TIP]
>
> ### Save on Your Hosting
>
> Ready to upgrade your hosting? Use code **KB20** at checkout for **20% off** your first order!

***

**Last Updated:** November 2026


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.