Sometimes I encounter Out of memory errors and Windows Event Viewer shows this (translated):
Resource-Exhaustion-Detector: A lack of virtual memory in the system was successfully detected. The largest amount of virtual memory was allocated to the following programs: 10582573056 bytes were allocated for myapp.exe (12412), 916819968 bytes were allocated for firefox.exe (18240) and 794206208 bytes were allocated for firefox.exe (13724).
myapp.exe allocated 10 GB, Firefox.exe-s allocated totally ~4.5 GB, some other stuff 10x150MB (as I check later in Task Manager), so total commit should be 16 GB but since I receive these lack of memory warning I assume that the real commit is about 34 GB (32 GB of RAM + 2 GB pagefile).
What could be that hidden thing with big commit that is neither shown in Task Manager processes nor reported by Resource-Exhaustion-Detector?
Is cached memory shown in Task Manager counted towards commited? If counted then why isn't it freed when another app tries to allocate for its needs (as I understand cached memory just fills not used RAM and should be immediately freed when that memory is required)?
Here is a screenshot of different time when Task Manager shows 19.3 GB commited but if I sum everything in allocated column in Details tab it's ~14.3 GB, not 19.3.
Update
This is not a duplicate of Resource-Exhaustion-Detector: out of virtual memory, but plenty of RAM available
In that previous question I asked why I receive out of memory when I have free RAM, now I know the answer - because I'm out of commited memory. Now I'm asking why I'm running of commited memory while no app actually commits that much. They are different.
None of these either answer my question because they are about having physical memory free but receiving Out of memory errors, but I'm asking about reasons why I have no free virtual memory:
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.
Why is my "Committed" memory so much higher than my actual RAM space?
I have run two virus scans and neither of them have found anything so far (Malware Bytes and Avira Rescue). During gaming I will get Windows popups saying that my system is low of memory and recommends closing the game. This can also happen while browsing. My computer seems to become sluggish a lot and will hang up often, such as when clicking a link from a messenger program to open in my browser.
I am unsure what is causing this. My memory usage on the processes tab doesn't add up to such a high percentage of my actual memory.
As a side note, is my Disk Usage supposed to spike up to 100% sometimes? Research seems to say so.
3 Answers
"Why is my “Committed” memory so much higher than my actual RAM space?" Because "committed" is mostly process-private virtual address space, and some of this can be in RAM and some in the pagefile.
And some might not occupy any storage at all! That's if it's been allocated but never accessed, hence not "faulted in", yet. But it still counts against the "commit limit" because if it's it accessed in the future, it will occupy storage then. And that's too late for the system to say "sorry, we're all out of room."
The whole point of virtual memory is that it can be much larger than physical (RAM), no?
btw... you appear to have a pagefile of about 24 GB, since you have 8 GB RAM and the commit limit is 32 GB. So your "committed" could be as high as 32 GB. (And at the moment it almost is that high, so reducing or eliminating the pagefile would be a bad idea.)
Whereas RAM used is just that. So, of course, RAM used + pagefile used can be larger than RAM used.
Part of the whole point of virtual memory, after all, is that you can have more virtual memory in use than you have physical memory (RAM).
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.
The easy way to think about it is rewind back to 1995.
A high-end PC would have 8 MB of RAM (yes, megabytes). And yet on Windows NT (which became Windows 2000, which became Windows XP) your application's would think that they had access to 2 GB of memory - a number so large it boggles the mind.
And your application could do it:
How could that possibly work? How could my program be actively using 2 GB of memory, when the PC only has 8 MB of RAM? Where is all this stuff going? It's obviously not going into the RAM chips.
The answer is virtual memory
Applications allocate memory in 4 KB chunks called pages. If all the pages in RAM are full:
And what if the program who was using that page needs it?
Your application can then access the page as though nothing happened.
Same is true today
while only having 16 GB of "RAM"
? The image from the questions reads: In use 4.2+Available 3.6=7.8 . So why did you write 16FB?Windows uses a pagefile, which is like RAM, but stored in your hard drive. It's much slower, but it's useful when you need to use more memory than you have in your computer. Windows stores parts of memory that have not been used for a while in the page file when it needs to store more memory but doesn't have any space in the RAM to store it.
Committed memory is the memory you have in your computer plus the page file. It looks like sometimes programs use too much memory and made windows store some things in the pagefile. The pagefile wasn't big enough to fit all the memory windows was storing in it, so it had to increase its size. It kept increasing its size, until it reached its limit. Now Windows can't further increase the pagefile, which means it can't store any extra memory, so its only option is to tell you to close a few programs to reduce memory usage. The reason your computer is slow is because it needs to load stuff from the pagefile, which is much slower than loading directly from RAM and makes disk usage really high, as the pagefile is stored in the hard drive.
You should not have as many programs open as you do and make sure that your computer has enough memory for the games you're playing and the programs you use. I hope this helps!