Windows 11 Memory Troubleshooting Cheat Sheet
Sidebar
Operating Systems ยท Windows 11 Memory Troubleshooting Cheat Sheet
What the memory words mean, which numbers to read, and how to tell a leak from a cache from a busy PC. Counter names were all run on this PC (Windows 11 Pro, build 26300, 32 GB installed / 29.8 GB usable) as a normal user. Interpretations come from Microsoft's documentation and the course Windows 11 Memory, Performance & Crash Forensics; the tools RAMMap and PoolMon were not run here.
Words That Get Confused
Working setPhysical RAM a process is using now (shared pages included)Private working setRAM only that process uses. Task Manager's Memory column on the Processes tab shows thisCommit (private bytes)Memory a process has promised: RAM plus page file. Task Manager's Commit size columnCommit charge / limitSystem total promised / the maximum (RAM + page file). Here 29.5 of 77.8 GBIn useRAM holding data programs need right nowStandby (cached)Old data kept in RAM because it might be needed again; Windows gives it back on demand. Counts as AvailableModifiedChanged pages waiting to be written to diskFreeTruly empty RAM. Normally small on a healthy PCAvailableFree + Standby: what can be handed to a program right awayCounters That Matter
\Memory\Available MBytesRAM that can be used immediately (13,584 here)\Memory\Committed BytesCommit charge\Memory\Commit LimitRAM + page file\Memory\% Committed Bytes In UseCharge as a percentage of the limit (35 here)\Paging File(_Total)\% UsageHow much of the page file is in use; % Usage Peak is the high-water mark\Memory\Pages Input/secPages read from disk to satisfy page faults. Sustained high values with low Available memory mean a starved PC\Memory\Page Faults/secIncludes harmless soft faults: large numbers alone mean little\Memory\Pool Nonpaged BytesKernel memory that must stay in RAM; steady growth points at a driver\Memory\Pool Paged BytesKernel memory that can be paged out\Memory\Standby Cache Normal Priority BytesThe bulk of the Standby cache (13.6 GB here)\Process(_Total)\Handle CountOpen handles system-wide (192,314 here); watch a single process for runaway growthQuick Looks (PowerShell, No Admin)
Get-Counter '\Memory\Available MBytes'Add -Continuous to sample every second; Ctrl+C to stopGet-CimInstance Win32_OperatingSystemTotalVisibleMemorySize, FreePhysicalMemory. Careful: Free here is not the Free list; use the counters aboveGet-CimInstance Win32_PageFileUsagePage file name, size (AllocatedBaseSize) and PeakUsage in MBGet-CimInstance Win32_PhysicalMemoryThe modules: size, rated Speed, ConfiguredClockSpeed, part numberGet-Process -Name 'Memory Compression'The compressed-memory store (around 1.4 GB here); its size counts in In useMemory Compression's on/off setting needs Get-MMAgent, which was access-denied without administrator rights here.
Top Consumers
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, Id, @{n='MB';e={[int]($_.WorkingSet64/1MB)}}Biggest by working setGet-Process | Sort-Object PrivateMemorySize64 -Descending | Select-Object -First 10 Name, Id, @{n='CommitMB';e={[int]($_.PrivateMemorySize64/1MB)}}Biggest by commit (private bytes)Get-Process | Sort-Object Handles -Descending | Select-Object -First 10 Name, Id, HandlesMost handlesGet-Process firefox | Measure-Object WorkingSet64 -SumTotal for one program with many processes (browsers: 27 here). Working sets overlap, so the sum overstates real use; compare PrivateMemorySize64Leak, Cache or Busy?
LeakA process's commit or a kernel pool grows steadily and never gives anything back, even when the program is idle. It needs hours of samples, not minutesCacheGrowth that stops by itself, or shrinks when other programs ask for memory (the Standby list does this by design)SawtoothGrows, drops, grows: ordinary garbage collection or a program cleaning up. Not a leakBusyAvailable low but Pages Input/sec near zero and page file use low: Windows is using spare RAM as cache. FineStarvedAvailable low, Pages Input/sec high, page file filling, everything slow: too little RAM for the workloadHandle leakOne process's Handles climbs while its memory stays flatPool leakPool Nonpaged/Paged Bytes climbs while no process's memory does: a driver. PoolMon (Windows Driver Kit) finds the tagPage File and Commit
Why have oneIt backs commit (so the limit is higher than RAM) and holds crash dumps if the dump type needs itSystem-managedWindows picks the size. Here 48 GB (1.5 x RAM) with a peak use of 153 MB: far larger than needed, and the reason is unexplainedRAM + page file= Commit Limit (checked here to the byte: 83,522,240,512)Changing itSettings > System > About > Advanced system settings > Performance > Advanced > Virtual memory. Note the old value first; needs admin and a restartNever turn it offPrograms can then fail when commit runs out, even with RAM freeOther Tools
Task Manager > Performance > MemoryIn use, Available, Committed, Cached, Paged/Non-paged pool, Speed, Slots usedresmonResource Monitor > Memory tab: the Hard Faults/sec column and the physical memory bar (Hardware Reserved, In Use, Modified, Standby, Free)RAMMap (Sysinternals)Shows where RAM goes by type, and can empty the Standby list. Needs administrator rights. Not run herePoolMon (WDK)Kernel pool by tag: for finding a leaking driver. Not installed heremdsched.exeWindows Memory Diagnostic: restarts the PC and tests the RAM. A pass is weak evidence; a fail is strong. Never run hereFree is not the number to watch
A PC showing 13.7 GB free in one place and 2 GB in another is not broken: some tools report Free + Standby (Available) as free. Read Available MBytes and Pages Input/sec, not the word free.
One sample proves nothing
A cache looks like a leak for the first few minutes. Sample for hours and compare like with like (same program, same activity) before deciding.