Monitoring CPU and RAM tells you whether a slow system needs tuning, fewer programs, or more resources. Windows includes everything you need — from a quick glance in Task Manager to long-term recording with Performance Monitor.

Quick look: Task Manager

Ctrl + Shift + Esc → Performance tab:

  • CPU — overall utilization, speed, number of cores/logical processors, uptime. Right-click the graph → Change graph to → Logical processors to see whether one core is maxed out (common with single-threaded apps).
  • Memory — In use, Available, Committed, Cached, and the page file.

Processes tab: sort by CPU or Memory to find the heaviest programs. Details tab shows exact process names and PIDs.

Reading memory correctly

  • Available is what matters — it includes cached (Standby) memory Windows can free instantly.
  • Committed (e.g. 6.2/9.5 GB) is memory promised to programs vs the limit (RAM + page file). When it approaches the limit, programs fail to allocate memory.
  • High Cached is good — Windows uses spare RAM to speed up file access.

Deeper: Resource Monitor

resmon shows per-process CPU (with services inside svchost.exe), Hard Faults/sec (page file reads — the real sign of memory shortage), and disk/network activity per process. Guide: Windows Resource Monitor.

Over time: Performance Monitor

Live views don’t help with problems that happen at 3 a.m. Performance Monitor (perfmon) can record counters to a file.

Create a data collector set

  1. perfmon → Data Collector Sets → User Defined → right-click → New → Data Collector Set.
  2. Create manually (Advanced) → Performance counter.
  3. Add counters:
    • Processor(_Total)\% Processor Time
    • System\Processor Queue Length
    • Memory\Available MBytes
    • Memory\Pages/sec
    • Memory\% Committed Bytes In Use
    • Process(*)\% Processor Time and Process(*)\Working Set (to see which process)
  4. Sample interval: 15–60 seconds.
  5. Start it. Open the result later under Reports.

Thresholds to watch

Counter Concern if consistently…
% Processor Time > 80–85%
Processor Queue Length > 2 × number of cores
Available MBytes < 10% of RAM
Pages/sec high together with low available memory
% Committed Bytes In Use > 80–90%

PowerShell

Quick samples:

Get-Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes' -SampleInterval 5 -MaxSamples 12

Top processes by CPU time and memory:

Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU,
  @{n='RAM(MB)';e={[math]::Round($_.WorkingSet64/1MB)}}

Log to CSV every minute (run via Task Scheduler):

$c = Get-Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes'
[pscustomobject]@{
  Time = Get-Date
  CPU  = [math]::Round($c.CounterSamples[0].CookedValue,1)
  FreeMB = [math]::Round($c.CounterSamples[1].CookedValue)
} | Export-Csv C:\Scripts\perf.csv -Append -NoTypeInformation

Alerts

For servers, use a monitoring agent that alerts you (email, chat) when CPU or memory stays high — Zabbix, Prometheus windows_exporter, Netdata, or a hosted monitoring service.

What to do with the results

  • One process using a full core — the app is single-threaded or stuck; update or restart it, or check its logs.
  • High CPU from Windows services — often Windows Update, Defender scans or Search indexing; they settle down, or you can schedule/limit them (Search indexing).
  • Low available memory + hard faults — close or reconfigure memory-hungry programs, or add RAM.
  • Everything high at peak times — the server is undersized for the workload.

On a Windows VPS, remember Windows Server itself uses 1.5–2 GB of RAM. Trading terminals, browsers and databases add up quickly — plans can be upgraded by ticket when monitoring shows sustained pressure. See also our Forex VPS page.

  • Windows
  • Performance
  • Monitoring