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
perfmon→ Data Collector Sets → User Defined → right-click → New → Data Collector Set.- Create manually (Advanced) → Performance counter.
- Add counters:
Processor(_Total)\% Processor TimeSystem\Processor Queue LengthMemory\Available MBytesMemory\Pages/secMemory\% Committed Bytes In UseProcess(*)\% Processor TimeandProcess(*)\Working Set(to see which process)
- Sample interval: 15–60 seconds.
- 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.