0

I noticed my PC with Windows 7 x64 very often say system memory is running low. This happens when I open some "heavy" programs simultaneously (like Firefox with many tabs, photoediting, CAD, etc).

I double checked the used RAM via task manager but it never reach the limit. In addiction to this, sometimes system automatically close programs.

Today I tried to run a quite memory-heavy game (Black Ops 3) and at first attempt (with firefox open) the game crashed. Closing firefox game run correctly but after couple of minutes playing it crashes again. In both cases error windows show me refers to memory. Even in the game log console there was a "OUT OF MEMORY" or similar.

I read something about this issues relative to Paging File. I have disabled it because I have a 250GB SSD.

I hope someone can help me because it's very frustrating.

Here some hardware/system details:

  • CPU: Intel Core i7-930
  • Motherboard(MB): ASUS P6X58D PREMIUM (Intel X58 + ICH10R)
  • RAM: 12GB DDR3-1600 (Triple-Channel), splitted as follow:
    • 3x2GB Corsair CM3X2G1600C8 (CL8) - [slot: 1-3-5]
    • 3x2GB Corsair CMX6GX3M3A1600C9 (CL9) - [slot: 2-4-6]
  • OS: Windows 7 Professional (x64)

Edit: I will add more information to help. I tried to reproduce error, but I have partial success. Here the results and info:

This is the warning I usually get before the error. It's a web image (I cannot reproduce it now) but the content its right that. Usually I have Firefox (or another one of the first program I launched) as application name in the warning text. Click to see image, I cannot attach them yet due I'm new here.

This is the Black Ops 3 game error log when I launch it with Firefox running. In addiction to game crash also Firefox crashed.

Command line: 
Error: Waited 102 msec for missing asset "debug_sphere_exterior".
Error: Could not find material "debug_sphere_exterior".
Error: Could not find material "debug_sphere_interior".
Error: Could not find material "debug_sphere_exterior_nodepth".
Error: Could not find material "debug_sphere_interior_nodepth".
Error: Could not find material "postfx_dragonstrike".
Error: Could not find material "logo".
Error: Could not find material "mc/infrared_white".
Error: Could not find material "mc/hud_outline_model_green".
Error: Could not find material "mc/hud_outline_model_red".
Error: Could not find material "mc/hud_outline_model_orange".
Error: Could not find material "mc/hud_outline_model_white".
Error: Could not find material "mc/hud_outline_model_green_alpha".
Error: Could not find material "mc/hud_outline_model_red_alpha".
Error: Could not find material "mc/hud_outline_model_orange_alpha".
Error: Could not find material "mc/hud_outline_model_white_alpha".
Error: Could not find material "mc/hud_outline_model_green_calpha".
Error: Could not find material "mc/hud_outline_model_red_calpha".
Error: Could not find material "mc/hud_outline_model_orange_calpha".
Error: Could not find material "mc/hud_outline_model_white_calpha".
Error: Could not find material "mc/hud_outline_model_z_green".
Error: Could not find material "mc/hud_outline_model_z_red".
Error: Could not find material "mc/hud_outline_model_z_orange".
Error: Could not find material "mc/hud_outline_model_z_white".
Error: Could not find material "mc/hud_outline_model_z_green_alpha".
Error: Could not find material "mc/hud_outline_model_z_red_alpha".
Error: Could not find material "mc/hud_outline_model_z_orange_alpha".
Error: Could not find material "mc/hud_outline_model_z_white_alpha".
Error: Could not find material "mc/hud_outline_model_z_green_calpha".
Error: Could not find material "mc/hud_outline_model_z_red_calpha".
Error: Could not find material "mc/hud_outline_model_z_orange_calpha".
Error: Could not find material "mc/hud_outline_model_z_white_calpha".
Error: Could not find material "mc/sonar_weakpoint".
Error: Could not find material "mc/hud_outline_model_scriptint".
Error: Could not find material "mc/hud_outline_model_alpha_scriptint".
Error: Could not find material "mc/hud_outline_model_calpha_scriptint".
Error: Could not find material "mc/hud_outline_model_z_scriptint".
Error: Could not find material "mc/hud_outline_model_zonly_scriptint".
Error: Could not find material "mc/hud_outline_model_z_alpha_scriptint".
Error: Could not find material "mc/hud_outline_model_z_calpha_scriptint".
Error: Could not find material "mc/sonar_frontend_normal".
Error: Could not find material "mc/sonar_frontend_locked_gun".
Error: Could not find material "mc/sonar_frontend_token_locked_gun".
Error: Could not find material "fontcache".
Error: Could not find material "fontcache_distfield".
Error: Could not find material "fontcache_glow".
Error: Could not find material "fontcache_outline".
Error: Could not find material "fontcache_shadow".
Error: Could not find material "lui_loader_no_offset".
Error: Could not find weapon "killstreak_dogs_cp".
Error: Could not find weapon "killstreak_emp_cp".
Error: Could not find weapon "weapon_null_mp".
Error: Could not find weapon "weapon_null_cp".
Error: Could not find fx "_t6/impacts/fx_flesh_hit_neck_fatal".
Error: Could not find fx "_t6/misc/fx_ui_flagbase_pmc".
Error: Could not find fx "_t6/trail/fx_trail_blood_streak".
Error: Could not find fx "_t6/weapon/riotshield/fx_riotshield_depoly_dust".
Error: Could not find fx "_t6/weapon/riotshield/fx_riotshield_depoly_lights".
Error: Could not find fx "killstreaks/fx_heli_chaff".
Error: Could not find fx "lensflares/fx_lensflare_sniper_glint".
Error: Could not find fx "player/fx_plyr_clone_reaper_appear".
Error: Could not find fx "player/fx_plyr_clone_reaper_orb".
Error: Could not find fx "player/fx_plyr_clone_vanish".
Error: Could not find fx "player/fx_plyr_flashback_trail_impact".
Error: Could not find fx "player/fx_plyr_rejack_light".
Error: Could not find fx "player/fx_plyr_revive".
Error: Could not find fx "player/fx_plyr_revive_demat".
Error: Could not find fx "vehicle/fx_quadtank_airburst".
Error: Could not find fx "vehicle/fx_quadtank_airburst_ground".
Error: Could not find fx "weapon/fx_betty_light_blue".
Error: Could not find fx "weapon/fx_betty_light_orng".
Error: Could not find fx "weapon/fx_hero_pineapple_trail_blue".
Error: Could not find fx "weapon/fx_hero_pineapple_trail_orng".
Error: Could not find fx "zombie/fx_blood_torso_explo_zmb".
Error: Could not find fx "animals/fx_bio_direwolf_eyes".
Error: Could not find fx "dlc1/castle/fx_mech_dmg_armor".
Error: Could not find fx "dlc1/castle/fx_mech_dmg_armor_face".
Error: Could not find fx "dlc1/castle/fx_mech_dmg_body_light".
Error: Could not find fx "dlc1/castle/fx_mech_dmg_knee_sparks".
Error: Could not find fx "dlc1/castle/fx_mech_dmg_sparks".
Error: Could not find fx "dlc1/castle/fx_mech_foot_step".
Error: Could not find fx "dlc1/castle/fx_mech_foot_step_steam".
Error: Could not find fx "dlc1/castle/fx_mech_head_light".
Error: Could not find fx "dlc1/castle/fx_mech_light_dmg".
Error: Could not find fx "dlc1/castle/fx_mech_wpn_flamethrower".
Error: Could not find fx "dlc1/castle/fx_wpn_115_muz".
Error: Could not find fx "dlc2/island/fx_spores_cloud_ambient_lrg".
Error: Could not find fx "dlc2/island/fx_spores_cloud_ambient_md".
Error: Could not find fx "dlc2/island/fx_spores_cloud_ambient_sm".
Error: Could not find fx "dlc2/island/fx_thrash_chest_mouth_drool_1p".
Error: Could not find fx "dlc2/island/fx_thrash_eye_glow".
Error: Could not find fx "dlc2/island/fx_thrash_eye_glow_rage".
Error: Could not find fx "dlc2/island/fx_thrash_pustule_burst".
Error: Could not find fx "dlc2/island/fx_thrash_pustule_impact".
Error: Could not find fx "dlc2/island/fx_thrash_pustule_reinflate".
Error: Could not find fx "dlc2/island/fx_thrash_pustule_spore_exp".
Error: Could not find fx "dlc2/island/fx_thrash_rage_gas_leg_lft".
Error: Could not find fx "dlc2/island/fx_thrash_rage_gas_leg_rgt".
Error: Could not find fx "dlc2/island/fx_thrash_rage_gas_torso".
Error: Could not find fx "electric/fx_ability_elec_surge_short_robot".
Error: Could not find fx "electric/fx_elec_warlord_damage_1".
Error: Could not find fx "electric/fx_elec_warlord_damage_2".
Error: Could not find fx "electric/fx_elec_warlord_lower_damage_1".
Error: Could not find fx "electric/fx_elec_warlord_lower_damage_2".
Error: Could not find fx "explosions/fx_exp_robot_stage3_evb".
Error: Could not find fx "explosions/fx_exp_warlord_death".
Error: Could not find fx "fire/fx_fire_ai_human_arm_left_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_arm_right_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_head_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_hip_left_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_hip_right_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_leg_left_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_leg_right_loop_optim".
Error: Could not find fx "fire/fx_fire_ai_human_torso_loop_optim".
Error: Could not find fx "light/fx_light_body_glow_warlord".
Error: Could not find fx "light/fx_light_eye_glow_warlord".
Error: Could not find fx "player/fx_plyr_ability_screen_blur_overdrive".
Error: Could not find fx "player/fx_plyr_flashback_trail".
Error: Could not find fx "player/fx_plyr_heat_wave_distortion_volume".
Error: Could not find fx "player/fx_plyr_heat_wave_distortion_volume_air".
Error: Could not find fx "player/fx_plyr_shock_field".
Error: Could not find fx "player/fx_plyr_shock_field_1p".
Error: Could not find fx "vehicle/fx_exhaust_jetpack_warlord_juke".
Error: Could not find fx "zombie/fx_fire_torso_zmb".
Error: Could not find fx "zombie/fx_margwa_head_shot_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_roar_purple_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_roar_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_teleport_intro_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_teleport_tell_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_teleport_travel_zod_zmb".
Error: Could not find fx "zombie/fx_margwa_teleport_zod_zmb".
Error: Could not find fx "zombie/fx_val_chest_burst".
Error: Could not find tagfx "ability_hero_heat_wave_player_impact".
Error: Could not find tagfx "gadget_flashback_3p_off".
Error: Could not find fx "zombie/fx_val_motes_100x100".
Error: Could not find weapon "smg_sten".
Error: Could not find weapon "pistol_revolver38".
Error: Could not find weapon "launcher_lockon".


Mem_Internal_MapPage failed
  • 2
    The message you have recieved indicates your page file is to small. The error is indicating your running out of virtual memory not physical memory. Please update your questions and provide specific error messages. Statements like, "Even in the game log console there was a "OUT OF MEMORY" or similar." make it difficult to submit an answer. – Ramhound Apr 12 '17 at 16:21
  • 1
    Take a look at Optimize the Paging File in Windows – yass Apr 12 '17 at 16:45
  • 1
    I tried to reproduce error right now and added more information in the main question. I cannot understand why I need to use Virtual Memory with 12GB of RAM. In addiction to this, all web pages about SSD explicit tell to disable Virtual Memory to avoid disk wear, so what I should do? – Noisemaker Apr 12 '17 at 18:56
  • 3
    Turn your page file back on! You're not running out of physical memory. Instead, without a page file your Total Commit Charge size is not big enough to accommodate all of the memory being reserved by the programs in use. Programs will request more memory than they actually use and if Windows cannot guarantee all requests can be satisfied, it will respond "out of memory"; exactly what's happening to you. – I say Reinstate Monica Apr 13 '17 at 3:50
  • 2
    @Noisemaker Can you link to any such pages so we can know to avoid them, comment on them, and otherwise mock them for their stupidity? – David Schwartz Apr 18 '17 at 22:50
4

First, let me say that you're not alone. This is almost certainly the most common question in the "Windows" + "Memory" areas here. It may well be in the top ten across all of SuperUser. And I blame Microsoft for not explaining things well, for not using good, consistent names for metrics across multiple displays, and not providing an easy-to-find-and-follow answer to this question, despite its "popularity".

In short, your confusion is understandable, even expected. It's not your fault.

The quick answer

If you're seeing "out of memory", "low on memory", etc., pop-ups from Windows, you really, really, really need to have a pagefile. Or increase the size of the one you already have.

(Or add more RAM, but that's not as easy. Or try to run fewer/smaller programs at one time, but nobody wants to do that.)

I have disabled it because I have a 250GB SSD.

Sorry to be blunt, but this doesn't make any sense. If you'd said "...because I have 64 GB of RAM", that would make some sense. Maybe. But having an SSD doesn't mean you don't need a pagefile.

Even having 64 GB of RAM doesn't guarantee you don't need a pagefile!

That error message, in fact, is telling you that you absolutely do need a pagefile. (Or more RAM... or you need to run less stuff and/or smaller stuff at one time.)

Yes, I know. You don't want to put a pagefile on your SSD. I'll address that at the end.

When it says "out of memory", it doesn't mean what you think it means

That error message is triggered by running out of something called "Commit Limit", not RAM. "Committed", or rather "private committed" to give it its full name, is a type of virtual memory in Windows. You probably know that the contents of "virtual memory" are to be found either in RAM or, if there isn't room for all of it, some of it is kept on disk (or SSD). For "private committed virtual memory", the place it's kept on disk is the pagefile. If you have one.

(There is also "mapped" virtual memory, which uses other files for paging instead of the pagefile, and there is nonpageable virtual memory, which has to stay in RAM at all times. Nonpageable v.m. contributes to "commit charge" so if you have too much of it it can contribute to the "out of memory" error message. Mapped memory does not so contribute, so I won't discuss it much here.)

What if you don't have a pagefile? Your programs can still create private committed virtual memory. But then all committed virtual memory that's been written to since it was first allocated has to stay in RAM at all times... until it's released (usually by ending the process that created it)... Because there's no place else for Windows to keep it.

The "commit limit" - that is, how much committed, written-to-at-least-once virtual memory that you can have - is therefore simply the size of your RAM plus the current size of your pagefile. (If you have pagefile expansion enabled, the commit limit enlarges when the pagefile does.)

If you will look at Task Manager, Performance tab in Windows 7, you will see an indication that looks like this:

Commit (MB) 893 / 4095

This says my commit charge is 893 MB, and my commit limit is 4095 MB, i.e. 4 GB. (This is from a virtual machine running Windows 7. It has 2 GB "RAM" and a 2 GB pagefile - so the commit limit is 4 GB.)

The "out of memory" error message appears when a program tries to allocate committed virtual memory, and the request cannot be granted because the system's "commit charge" is already at or near the "commit limit" - near enough that the request, if granted, would take commit charge over the limit.

Note that you see this message only after the request to "commit" has already been attempted and failed. So when you look at Task Manager, the reason for the problem might not be apparent.

Suppose you had 1 GB of commit limit left, and something tries to allocate 1.5 GB in one call. (This is uncommon, but it can happen.) The memory manager will reject the request and you'll see the popup. But then when you look at Task Manager you will still see your commit charge where it was before, with 1 GB still unused! Confusing. There is nothing in Task Manager, Resource Monitor, or even Performance Monitor that tells you how much was requested, either.

(The Process Monitor tool from sysinternals.com might help here.)

That error message really should say something like "Attempt to commit (size of request) would exceed commit limit", and although this would require people to look up what "commit limit" meant, it would be far more useful. Ah well, this is far from the only not-as-helpful-as-it-could be error message that's in Windows - or in any other OS I've ever used. (They could at least put more details in the system event log!)

Note that whenever you talk about "memory" on Windows, you should always qualify it - are you talking about "virtual memory" or "physical memory"? A lot of people say "memory" when they could mean either. And a lot of people say "RAM" when they're really talking about virtual memory. This only adds to everyone's confusion.

As I said earlier, the stuff that's counted in commit charge is one type of virtual memory. The commit limit is the maximum amount of that type of virtual memory that you can have. You can make the commit limit larger by adding more RAM and/or by increasing your pagefile size.

But I have plenty of RAM!

I cannot understand why I need to use Virtual Memory with 12GB of RAM.

That's a completely understandable question. And a very common one. And again I blame Microsoft for not explaining things better.

Briefly: You need a pagefile because your workload is trying to allocate more "committed virtual address space" than you have RAM.

First, terminology: Windows is always using virtual memory, whether or not you have a pagefile. Getting rid of the pagefile simply precludes paging to disk for committed virtual memory; the committed v.m. still exists and is still virtual, in every way except for being pageable to disk.

But another major type of virtual memory, the sort called "mapped memory", continues to page. Just not to the pagefile.

So what you're really asking is, why are you running out of your commit limit if you have 12 GB of RAM?

Well, that would be because however much you're already using, plus the size of an amount that some program is asking for, would exceed your commit limit.

You can see that message even if you have plenty of RAM "available", as reported in Task Manager. Conversely you might not see the message - i.e. a commit attempt can succeed - even if you have little "available" RAM. Because it's not complaining about available RAM. It's complaining about lack of commit limit.

Your program might be trying to allocate huge amounts of committed virtual memory. Or you might have something else running that's using up the commit.

Now here's a funny thing: When a process allocates committed memory, that doesn't actually use RAM equal to the committed amount. Because it's virtual, remember? In fact it takes very little RAM to just commit virtual memory, even without a pagefile. It's just saying "I ''might'' want to use up to ''this'' much committed virtual memory. Windows, can you promise ("commit") me that that much will be accessible, even if I use it all?"

Only until the program actually writes to that committed memory - by accessing it and so incurring page faults - does RAM actually come off of the "available" counter and get added to "in use". This happens on a page-by-page basis. If you write to 10 pages (4K each) within the committed region, that'll use 10 pages (40KB) of RAM.

(It would happen if you read from it, too, but it makes very little sense to read from newly-allocated virtual memory before you write to it.)

Very often the program will never actually access all of the private v.m. it has committed, in which case the RAM used will not equal the amount committed. (And on a system with a pagefile, some of the "committed" stuff might be moved out to the pagefile, to make more room in RAM for other things... further reducing the RAM used by the committed region.)

But Windows has no way of knowing how much of the committed region will be used; when making the allocation, it has no choice but to assume that I ''might'' actually use all of it. This means that 1 GB total of actual storage would be needed to keep it all (possibly some of it in the pagefile and the rest in RAM).

So it can't grant that request unless all of the current "commit" allocations together, plus the new one, would be less than the commit limit.

If it granted the request anyway, then there would be a risk of actually running out of RAM, i.e. being unable to resolve a pagefault because no RAM was available. That's considered a very serious problem. It's much easier, both on the OS and on application programmers, to enforce the limit when the program tries to commit the virtual memory.

For more info (as if this wasn't long enough already)

For more on this, explained in somewhat different ways, please see two of my other answers: here (longer) uses a "loans from the bank" analogy that some people have found effective. this one (much longer) has a more formal explanation of what's happening inside the OS. Often having the same concept presented in several different ways will help you get past a sticking point.

About the pagefile vs. the SSD

This is a side issue, so I moved it down here...

all web pages about SSD explicit tell to disable Virtual Memory to avoid disk wear

Sorry, but no, not all say that, and those that do are just wrong. Modern SSDs will handle petabytes of writes before starting to show problems. And from Support and Q&A for Solid-State Drives (msdn):

Should the pagefile be placed on SSDs?

Yes. Most pagefile operations are small random reads or larger sequential writes, both of which are types of operations that SSDs handle well.

In looking at telemetry data from thousands of traces and focusing on pagefile reads and writes, we find that

Pagefile.sys reads outnumber pagefile.sys writes by about 40 to 1,

Pagefile.sys read sizes are typically quite small, with 67% less than or equal to 4 KB, and 88% less than 16 KB.

Pagefile.sys writes are relatively large, with 62% greater than or equal to 128 KB and 45% being exactly 1 MB in size.

In fact, given typical pagefile reference patterns and the favorable performance characteristics SSDs have on those patterns, there are few files better than the pagefile to place on an SSD.

Here's one more surprising fact: Even though you may need a pagefile to allow the system to grant these requests, there may be very little, maybe even nothing, actually written to the pagefile! Again, this is because there's usually quite a difference between how much virtual memory is committed and how much actually gets used. By used we mean "written to, and pages of RAM assigned accordingly". Only private committed v.m. that's actually written to will ever go in the pagefile. Most modern systems (like yours, with 12 GB RAM) don't write and read the pagefile very much. Nevertheless, the pagefile is often necessary to allow the virtual allocations to succeed. And maybe that will set your mind at ease about putting it on your SSD.

|improve this answer|||||
  • Very well answered. It may be helpful to the OP to be more explicit about the fact programs request more virtual memory than they'll necessarily use. Someone looking at a system with 12 GB of RAM of which 6 GB is "available" might not realize (or understand why) running programs have allocated a total of 11 GB of committed virtual memory. – I say Reinstate Monica Apr 15 '17 at 4:51
  • I thought I was explicit about that, but I'll think about a way to underline it. Maybe with a demo. – Jamie Hanrahan Apr 15 '17 at 10:39
  • A demo would make this already great answer even better. This topic is confusing even for experienced Windows users. – I say Reinstate Monica Apr 15 '17 at 12:59
  • 1
    AFAIK commit does not have to be written to ("modified") to count; the very act of requesting commited memory is enough. And I disagree with the "unless you have 64 GB" bit - no matter how much you have, it's inefficient to have to reserve RAM just for committed-but-not-modified, when it's better used as disk cache. Well, most of the time, but if you truly have special requirements otherwise then you'd already know. Otherwise a great answer, as always. – Bob Apr 18 '17 at 22:56
  • @Bob Re "written to", yes, that was a "confused" edit. It has to be accessed to have actual storage used, but not to count for commit charge. The "64GB" was just an example number for what many would consider "enough to not have a pagefile". Also ++ re the allowing more RAM for the disk cache. All fixed, I think. Thanks! – Jamie Hanrahan Apr 19 '17 at 0:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.