• Happy holidays, folks! Thanks to each and every one of you for being part of the Tom's Hardware community!

[SOLVED] Windows 10 "Out of Memory" Errors with normal RAM usage but high Committed usage

Nov 25, 2020
2
0
10
System specs will be at the bottom.

I have a PC that is repeatedly getting "Out of Memory" errors even though the RAM usage does not go above %70 playing an intensive game.
I get these errors when opening google chrome, playing a game or simply trying to anything on my PC.

My troubleshooting so far:
  • Checked task manager for high RAM usage - RAM never goes above %70 and there is no specific program using a larger amount (Other than games which is expected)
  • Checked performance tab in task manager and the "Committed" usage is regularly around 62-63/63.9 GB (%95 +) whenever I experience this issue
    • Checked for memory leaks using the following tools
      • Task Manager > Details > Private working set / Commit Size / Paged Pool / NP Pool ---- Nothing unexpectedly high
      • Process Explorer > Anything to do with Private Bytes / Commit Size / Private Delta ---- Nothing unexpectedly high
      • PoolMon > Highest used is by MmSt which is using 300Mb (rest are <100Mb)and is also windows memory management so is expected to be at/near the top
      • DriverView > No driver that is older than 12 moths and most are at latest version
      • RAMMap > Nothing out of the ordinary, reports the same outcome as the other tools used
      • TaskInfo > "Private KB" reports nothing specifically higher than others. Vrt graph top left shows %95+ usage
Any help is much appreciated. I have tried every diagnostic that I find mentioned on any forum.
I am hesitant to do a fresh install of windows as on many forums that has made no difference.

The only thing that seems to make a difference, albeit temporary, is to manually set the page file size rather than let windows manage it. Like I say this is temporary as I get OOM errors after a few hours.
The boot drive is a 500GB M.2 NVME SSD and has over 90GB free
Other drive is a 2TB HDD with %70-80 free



System Specs:
AMD Ryzen 2600
ASUS Prime B450-PLUS ATX
2 x 8GB Corsair Vengeance LPX DDR4 3000MHz
500GB M.2 NVME SSD
2TB HDD
GeForce RTX 2060

Pc is a new build and is roughly 6 months old

Any help is greatly appreciated as I have tried everything I can find
 
Solution
its not running out of ram, its running out of commit charge. Something is asking for more memory and not giving it back when its "finished"

There has to be a way. Now I might be wrong but since drivers have to run in ram, I am not sure if this is a driver or something else. If its "something else" it could show up in Process explorer as while I know it won't show drivers, it may should other things

Download Process explorer and run it as admin (it comes from Microsoft so its safe)

The default view is tree structure meaning like your task manager screen, it will show what processes are under each service, but unlike task manager, it shows the memory usage of each part so you can see what is eating your resources. Clicking on...
do you run any VM software?

poolmon, did you sort by B? I only recently found out what some of the tags mean and it does seem common for MmSt to be at top considering its job

can you share a screenshot of poolmon next time you get the error? it might help
Often they are caused by older drivers. Do you have a Wi-Fi card in PC?

The only thing that seems to make a difference, albeit temporary, is to manually set the page file size rather than let windows manage it. Like I say this is temporary as I get OOM errors after a few hours.
reducing page file size reduces the total commitment charge so its not a solution, it just makes it happen faster. Without a page file the total memory that can be committed is 16gb (your ram amount) but with a page file the max it can get to is that 64gb figure you see.

Finding the identity of the cause of Maxing out commitment isn't exactly easy as its not a physical thing
Committed memory isn't something that physically exists. It isn't RAM usage, or pagefile usage, or any combination of them. It isn't actually stored anywhere. It is just a number. But it is an important number.

Committed memory (often referred to as the commit charge) is a somewhat difficult concept. Many Internet articles have tried to describe it, and got it wrong. It is difficult to describe something complex in a way that is both easy to understand and technically accurate. Microsoft user level documentation tends to err on the side of easy to understand, but at the expense of technical accuracy. Technical documentation is good, but of course it assumes the reader has the knowledge to understand it.

As simple as I can describe it:

When an application or the OS required a place to store data it must ask the memory manger for it. This is generally referred to as allocating memory. This data storage can be in RAM or the pagefile. When the request is mode the application may not need it immediately or know how much it will actually need. But it needs to know it is immediately available when it is needed. In fulfilling the request the memory manager promises or makes the commitment that it will be available. To do this it keeps a running total of all such requests by all applications. This is the commit charge.

The commit limit, the maximum level that the commit charge can reach, is RAM size plus pagefile size, minus a small overhead. With no pagefile it will simply be RAM size.

Windows will not allow the commit charge to exceed the commit limit. Otherwise it would be making a promise it may not be able to keep. That could lead to all kinds of bad things.

The memory manager will refuse a request if it would exceed the commit limit. Some applications will handle this gracefully but it is hard to do. Many will simply give up and silently terminate without warning. To avoid this it is important that the commit charge does not get too high.

It is not normally recommended to disable the pagefile. When disabled there is a hard limit on the commit limit, the size of RAM. With a pagefile with default configuration the commit limit will be RAM size plus pagefile size. And that is a soft limit. It can be increased by enlarging the pagefile if needed. Not that this doesn't imply the pagefile will actually be used. It just has to be there.
https://www.tenforums.com/general-support/157727-where-does-committed-memory-working.html

If you want to find out what's using committed memory you need to look at Task Manager's "Details" tab and enable the "Commit size" column.

Nor will the total of the "Commit size" columns add up to the "commit charge" (30.1 GB on your machine), because other things contribute to commit charge: Nonpaged and paged pool and some more "subtle" mechanisms like copy-on-write sections, pagefile-backed sections, AWE mappings... but these are usually small compared to process-private v.a.s.)

On that tab, the "Memory (Private working set)" column corresponds to what the "Processes" tab shows for "Memory". This is the RAM currently assigned to each process for its committed virtual address space. The remainder will be in the pagefile. But, again, processes have other types of address space, mostly of the sort called "mapped", and some fraction of that will be in RAM as well. There are other system-wide things created by the OS, not specific to any process, that use up RAM too.

In short the "Processes" tab's "Memory" column is not supposed to add up to the total RAM being used. It only shows how much of the total usage is being used privately by each process.

https://social.technet.microsoft.co...t-charge-seem-to-be-wrong?forum=winserver8gen

see if last post in this thread has anything to do with it - https://forums.tomshardware.com/threads/decompress-25-cpu-usage.3656501/
 
Last edited:
do you run any VM software?

I do not run any no

poolmon, did you sort by B?

Yes, i ran poolmon.exe -b

see if last post in this thread has anything to do with it - https://forums.tomshardware.com/threads/decompress-25-cpu-usage.3656501/

I have not torrented anything and I am not getting high idle CPU usage either. However I have checked for the processes mentioned in that thread and have found nothing.

Finding the identity of the cause of Maxing out commitment isn't exactly easy as its not a physical thing

Yes this is what I have figured out after a few days of furious googling
I have found many ways to (Apparently) see what is asking for memory but no tool i have tried leads me any closer to a solution. Hence my post here
Appreciate the help
 
The only thing I've ever run into close to that is an older build of Firefox. It would have a memory leak issue which would start chewing up RAM after a bit, and would lock a process open even when I 'closed' the program.

I would sit there and watch the memory usage, and it would start climbing, going up, little by little. Eventually it would hit near 2GB of RAM (there was 4GB available, 500mb was 'unavailable' and the rest used by system), then it would render the computer useless, eventually crash and take the system down with an 'out of memory' error.

It's possible you're running into the same thing, I guess what you'd need to do is find out what program is using the RAM...
 
its not running out of ram, its running out of commit charge. Something is asking for more memory and not giving it back when its "finished"

There has to be a way. Now I might be wrong but since drivers have to run in ram, I am not sure if this is a driver or something else. If its "something else" it could show up in Process explorer as while I know it won't show drivers, it may should other things

Download Process explorer and run it as admin (it comes from Microsoft so its safe)

The default view is tree structure meaning like your task manager screen, it will show what processes are under each service, but unlike task manager, it shows the memory usage of each part so you can see what is eating your resources. Clicking on the header of the column changes how its sorted, alphabetical or Tree

Private bytes = Ram + page file usage
Working set = actual ram usage

This page shows what all the colours and headings mean, link at bottom of it shows how to use it to find problems. You can right click process names and run an av scan from within the program.

My guess is it would be showing in Private Bytes since that is ram + page file, and this all seems to happen in virtual memory, not physical.

if you click on the charts that run along top of the application you can get more detailed information.
A6KKCea.jpg

So it knows what the max and current commit is but I can't find a way to know what has asked for it. That's the million dollar question really.

You can also right click the header column and add way more columns than come as default, it can over whelm you with information.
For instance, on the Status bar tab of the add columns page, you can get it show your own commits as opposed to the general one which is for entire system, so it shows how much your user account uses. Might be handy to narrow down cause
z1DzddY.jpg


if you right click a exe and choose properties you can find out a lot more in there too
QEOYsgk.jpg


You can add a column called Peak private bytes (in Process memory tab of add columns) that might give a clue as its possibly the total that was asked for by the process, and help you narrow it down more.

You need a more specific Windows forum where people who know how to diagnose Memory errors may be. I would maybe ask on https://www.tenforums.com/performance-maintenance/ or perhaps https://superuser.com/ as its where i would go if i can't find the answers easily.
 
Last edited:
Solution