MonitoringPerfmonWindows5 min read

Monitor server resources

Monitor CPU, RAM, disk, and network on Windows Server with Performance Monitor and PowerShell.


Monitoring CPU, RAM, disk and network usage helps you identify performance issues and plan capacity for your Windows Server VPS.

Task Manager

Quick overview of resource usage:

powershell
# Open Task Manager
taskmgr

Or press Ctrl+Shift+Esc in your RDP session. The Performance tab shows real-time CPU, memory, disk and network graphs.

PowerShell resource commands

powershell
# CPU usage
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 2 -MaxSamples 5

# Memory usage
Get-Counter '\Memory\Available MBytes'
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, @{N='RAM(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}

# Disk usage
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{N='Used(GB)';E={[math]::Round($_.Used/1GB,2)}}, @{N='Free(GB)';E={[math]::Round($_.Free/1GB,2)}}

# Disk I/O
Get-Counter '\PhysicalDisk(_Total)\Disk Reads/sec', '\PhysicalDisk(_Total)\Disk Writes/sec'

Performance Monitor (perfmon)

For detailed monitoring with graphs:

powershell
perfmon

Add counters for:

  • Processor → % Processor Time
  • Memory → Available MBytes
  • PhysicalDisk → % Disk Time
  • Network Interface → Bytes Total/sec

Event Viewer

Check system events and errors:

powershell
eventvwr.msc

Or via PowerShell:

powershell
# Recent errors
Get-WinEvent -LogName System -MaxEvents 20 | Where-Object {$_.LevelDisplayName -eq 'Error'}

# Recent warnings
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object {$_.LevelDisplayName -eq 'Warning'}

Resource Monitor

Detailed per-process resource usage:

powershell
resmon

Create a monitoring script

powershell
# Save as C:\scripts\monitor.ps1
$cpu = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
$mem = (Get-Counter '\Memory\Available MBytes').CounterSamples.CookedValue
$disk = (Get-PSDrive C).Free / 1GB

$report = "CPU: {0:N1}% | RAM Available: {1:N0} MB | Disk Free: {2:N1} GB" -f $cpu, $mem, $disk
Write-Host $report

# Log to file
Add-Content -Path "C:\logs\monitor.log" -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $report"

Schedule it with Task Scheduler to run every 5 minutes.

Tip

For continuous monitoring with alerts, consider installing Prometheus with windows_exporter or Datadog agent on your Baires Host VPS. These provide dashboards, historical data and alerting capabilities.


Was this guide helpful?