The system commit limit of Windows and Windows Server is the sum of physical memory and the size of all of the page files combined on the system. It is the maximum amount of physical resources that the system can use to back committed memory. It is a factitious
resource that prevents the system from over committing or over "promising" too much physical resources. With that said, when the system is unable to commit anymore memory, then applications may fail to function and the system may hang indefinitely.
The System Commit Charge is the total amount of memory used/committed by the operating system and all processes running on the computer. This memory is considered "in use", but does not mean that the memory has been written to or "touched". This means that
it is possible that the system commit charge can reach the system commit limit, but still have plenty of available physical memory and plenty of free space on the paging files.
The above screenshot is of Windows Task Manager on Windows 7. Highlighted in red is the System Commit Charge (2074 MB) and the System Commit Limit (8058 MB).
If the System Commit Charge reaches the System Commit Limit, then the system will attempt to increase the page file size (if set to System Managed), otherwise, the system will be in an out of memory condition. The percentage of the System Commit Charge compared
to the System Commit Limit can be measured using the "\Memory\% Committed Bytes In use" performance counter.
Processes operate in virtual memory and are unaware of the true physical environment of the computer, but when an application "commits" memory, then the operating system guarantees physical resources (physical memory and paging files) will back the allocation.
When the application writes to memory such as writing a value to a variable, then the memory is mapped to physical memory.
When the Windows operating system reports that it is low on "virtual memory" and mentions increasing the paging file, then it means that the System Commit Charge has reached the System Commit Limit. The paging file is commonly referred to as "virtual memory",
hense this reference. Unfortunately, the concept of process and kernel virtual memory is an entirely different subject unrelated to the system commit limit.
If the "\Memory\% Committed Bytes In use" performance counter is over 75%, then the system is close to running out of memory (both RAM and all page files). To troubleshoot this issue, try to find the highest consumers of committed memory:
If all of the above troubleshooting steps have been exhausted, then the symptoms of a high system commit charge can be treated with one or more of the following:
Vital Signs Workshop: Microsoft Services offers an instructor led workshop called, "Vital Signs", which goes in depth into Windows architecture focused on Windows performance analysis. If you are interested, then contact your Microsoft Technical
Account Manager (TAM). If you do not have a Microsoft Premier Support contract, then consider the great benefits of having one by going to our Microsoft Services Premier Support web site at:
"If you have identified processes consuming significant amounts of committed memory, then go here. [Link to future article]"
Is the "future article" already exist?
I'm slowly working on them as I have time which unfortunately is in short supply. I am also trying to work on a book on this subject. Hopefully, I will be active on both soon.
That is a very good article Clint!!! Thanks for Sharing!
Thanks, Tord. I met with the Windows product team earlier this week discussing modern memory troubleshooting and this material was one of the topics. This is the kind of material that will be in my upcoming book, "The Microsoft Windows Performance Analysis Field Guide" due out early next year.
I'm still confusing on Committed Memory. I found that Committed Memory usually larger than physical memory usage at about 2GB or up to 5GB after the computer running a few days. And if I close all softwares I opened, the Committed Memory still larger than physical memory. Like a diehard, it can't be released. Even though I use RAMMap to empty all I can empty, nothing changed. Why? (Sorry for my poor English)
Windows 8.1 x64
Intel Core i7 3770K CPU(using it's built-in GPU)
16GB physical memory
Virtual Memory(Page File) only set to 800MB