Why is Windows using so much memory?
Diagnose which processes and services are consuming your RAM on Windows, and verify the fix from the command line.
What this covers
When Windows uses a lot of memory, your PC slows down, apps stutter, and the disk may churn as the page file absorbs overflow. The good news: you can pinpoint the culprit from the command line without installing anything. This guide walks you from finding the memory hogs to verifying your system has recovered.
Symptom
Find which processes are eating your RAM
Before changing anything, rank the top 15 processes by working-set memory. This tells you whether one runaway app or many small ones are responsible. If a single process dominates, you know what to close or fix; if memory is spread thin, look at background services next.
Rank running processes by working-set memory and CPU time in one PowerShell pipeline.
$ Get-Process | Sort-Object WS -Descending | Select-Object -First 15 Name, Id, @{n='Mem(MB)';e={[math]::Round($_.WS/1MB,1)}}, @{n='CPU(s)';e={[math]::Round($_.CPU,1)}} | Format-Table -AutoSizeCheck what is hiding inside svchost.exe
svchost.exe often appears multiple times with large memory footprints, but each instance hosts different services. List the services inside each one so you know which Windows component is actually consuming the memory instead of blaming Windows blindly.
Use tasklist /SVC to reveal the services hosted inside every process, especially svchost.exe.
$ tasklist /SVC /FI "IMAGENAME eq svchost.exe"See how close you are to memory exhaustion
The page file absorbs overflow when physical RAM runs out. Query its current and peak usage: high peak usage means Windows has been spilling to disk, which explains slowdowns even before memory is fully exhausted. Low peaks suggest your problem is a single misbehaving process, not a system-wide shortage.
Query Win32_PageFileUsage to see page file size, current usage, and peak usage — how close you are to memory exhaustion.
$ Get-CimInstance Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsageConfirm the offender is still running before acting
Once you have identified a suspicious program from the memory ranking, confirm it is actually running right now and note its PID. This makes sure you act on the right instance — especially if the program spawns multiple processes — before you close or restart it.
Check if a program is running and get its process ID using tasklist with findstr or the /FI filter.
$ tasklist | findstr /i chrome :: or filtered directly: tasklist /FI "IMAGENAME eq chrome.exe"Verify the system is back to normal
After closing or restarting the memory hog, re-check the heaviest processes ranked by CPU. A healthy system shows no single process dominating for long, and the previously bloated process should no longer appear at the top of the memory list either.
Rank running processes by CPU time using Get-Process and Sort-Object.
$ Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPUCheck the stability timeline for related crashes
Open Reliability Monitor to see whether memory pressure coincided with app crashes or driver failures. A clean recent timeline, with no new errors after your fix, confirms the memory problem is resolved rather than just moved.
perfmon /rel opens the stability timeline that shows which apps or drivers crash and when.
$ perfmon /relHow to confirm it worked
Re-rank the heaviest processes and open Reliability Monitor: no single process should dominate, and there should be no new errors after your fix.
Sources
- tasklistEvidence: Syntax includes /svc which 'Lists all the service information for each process' — i.e. services hosted inside each process.
- TaskList — List processes running on the machineEvidence: Documents /SVC: 'List services hosted within each process' — useful for identifying the services inside svchost.exe instances.
- Win32_PageFileUsage classEvidence: Win32_PageFileUsage exposes AllocatedBaseSize (current MB), CurrentUsage and PeakUsage for each page file on the system.
- Start Reliability MonitorEvidence: Instructions state you can start Reliability Monitor "in its own window by typing perfmon /rel".
- Get-Process - SS64Evidence: Shows sorting processes by working set and other memory-oriented examples.
- perfmonEvidence: Lists the /rel switch that starts Reliability Monitor with a specific report.
- Get-ProcessEvidence: Documents Get-Process objects and their WS and CPU properties.
Last verified: 2026-09-21
Related guides
Control what runs when Windows starts: open the Startup folder, change service startup types, and handle Fast Startup quirks.
A step-by-step problem-fix guide for Windows: identify your disks, rule out failing hardware, find the process or service hammering the disk, optimize the drive, and verify the file system is clean.
A step-by-step command-line guide to find out why Bluetooth is not working on Windows and get it back — from device status to services to drivers.