Windows – What could be causing such a high commit charge in XP

commit-chargememorywindows

I was getting out of memory errors running virtual machines in VirtualBox so I checked my commit charge and lo and behold, it's 1913 MB!

I only have 2GB physical RAM.

After closing all "applications" I have 1800 or so MB still in commit charge. That's the majority of my RAM. Opening process explorer shows no processes that seem out of order, the biggest memory hog being process explorer itself at about 26MB and everything else quite a bit smaller.

Can windows "leak" memory? Should I suspect a driver or something like the Symantec antivirus? Would their memory use even show up in process explorer somehow?

After further investigation I believe this is a VirtualBox related issue. For some reason after terminating some virtual machines, even after terminating VirtualBox, it was not freeing the memory allocated to them. For another reason I can't figure out, the task manager / process explorer cannot see the memory allocated to virtual machines in VirtualBox. It is does not show up on any process or task list. The only sign that it is happening is that the commit charge rises.

Best Answer

Commit charge is basically the maximum potential pagefile usage. It is not related to the RAM.

Windows basically addresses memory into the pagefile before any applications uses it based on current pagefile usage. The commit charge doesn't reflect current memory usage, but reflects how much memory Windows is current addressing in the pagefile.

The Windows Task Manager utility, in its Performance tab, shows three counters related to commit charge:

  • Total is the amount of pagefile-backed virtual address space in use, i.e., the current commit charge. The corresponding performance counter is called "Committed Bytes".
  • Limit is the maximum possible value for Total; it is the sum of the current pagefile size plus the physical memory available for paging (this excludes RAM that is assigned to non-pageable areas). The corresponding performance counter is called "Commit Limit".
  • Peak is the highest amount that the total commit charge has reached since the computer was last rebooted.

The commit charge increases when any program is opened and used, and goes down when a program is closed. It will also change when already-running programs allocate or free private virtual memory; for example, with the VirtualAlloc and VirtualFree APIs.

The commit limit may be increased by either creating additional pagefiles or, if pagefile expansion is enabled, by expanding an existing one. The operating system will expand the pagefile automatically, if possible, when the total commit charge approaches the limit. In such an event a popup window will be displayed stating that "The system is running low on virtual memory."

Some more information is available in Windows XP's documentation.

Related Question