快速答案

快速答案

我注意到我的 Windows 7 x64 电脑经常提示系统内存不足。当我同时打开一些“大型”程序(例如带有许多选项卡的 Firefox、照片编辑、CAD 等)时,就会出现这种情况。

我通过任务管理器仔细检查了 RAM 的使用情况,但从未达到极限。除此之外,有时系统会自动关闭程序。

今天我尝试运行一款占用大量内存的游戏(《黑色行动 3》),第一次尝试(打开 Firefox)时游戏崩溃了。关闭 Firefox 后游戏运行正常,但玩了几分钟后又崩溃了。在这两种情况下,错误窗口都显示与内存有关。甚至在游戏日志控制台中也显示“内存不足”或类似信息。

我读了一些有关分页文件的问题。我已禁用它,因为我有一个 250GB SSD。

我希望有人能帮助我,因为这很令人沮丧。

以下是一些硬件/系统详细信息:

  • 处理器:Intel Core i7-930
  • 主板(MB):华硕 P6X58D PREMIUM(英特尔 X58 + ICH10R)
  • RAM:12GB DDR3-1600(三通道),分配如下:
    • 3x2GB Corsair CM3X2G1600C8 (CL8) - [插槽:1-3-5]
    • 3x2GB Corsair CMX6GX3M3A1600C9 (CL9) - [插槽:2-4-6]
  • 操作系统:Windows 7 专业版(x64)

编辑:我将添加更多信息以提供帮助。我尝试重现错误,但部分成功。以下是结果和信息:

这是我通常在错误发生前收到的警告。这是一个网页图像(我现在无法重现它),但内容就是这样。通常我在警告文本中使用 Firefox(或我启动的第一个程序之一)作为应用程序名称。 单击查看图片,由于我是新手,所以我还不能附加它们。

这是我在 Firefox 运行的情况下启动 Black Ops 3 游戏时出现的错误日志。除了游戏崩溃外,Firefox 也崩溃了。

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

答案1

首先,我要说的是,您并不孤单。这几乎肯定是“Windows”+“内存”领域中最常见的问题。它很可能是 SuperUser 中前十名的问题之一。我指责微软没有很好地解释这些事情,没有为跨多个显示器的指标使用良好、一致的名称,也没有为这个问题提供一个易于查找和理解的答案,尽管它“很受欢迎”。

简而言之,你的困惑是可以理解的,甚至是意料之中的。这不是你的错。

快速答案

如果你看到 Windows 弹出“内存不足”、“内存不足”等提示,你真的真的真的需要有页面文件。或者增加已有页面文件的大小。

(或者添加更多 RAM,但这并不容易。或者尝试一次运行更少/更小的程序,但没人愿意这样做。)

我已经禁用它,因为我有一个 250GB 的 SSD。

抱歉,我直言不讳,但这没有任何意义。如果你说“...因为我有 64 GB 的 RAM”,那就有道理了。也许吧。但拥有 SSD 并不意味着你不需要页面文件。

即使拥有 64 GB 的 RAM 也不能保证您不需要页面文件!

事实上,这个错误信息是在告诉你绝对需要页面文件。(或更多 RAM...或者您需要一次运行更少的东西和/或更小的东西。)

是的,我知道。您不想将页面文件放在 SSD 上。我将在最后讨论这个问题。

当它说“内存不足”时,它并不意味着你认为的意思

该错误消息是由于“提交限制”而不是 RAM 耗尽而触发的。“已提交”或更确切地说是“私有已提交”是 Windows 中的一种虚拟内存。您可能知道“虚拟内存”的内容要么位于 RAM 中,要么如果空间不足以容纳所有内容,则部分内容会保存在磁盘(或 SSD)上。对于“私有已提交虚拟内存”,其保存在磁盘上的位置是页面文件。如果您有一个的话。

(还有“映射”虚拟内存,它使用其他文件而不是页面文件进行分页,还有不可分页虚拟内存,它必须始终保留在 RAM 中。不可分页的虚拟机会导致“提交电荷”,因此如果不可分页的虚拟机过多,则会导致“内存不足”错误消息。映射内存不会产生这样的影响,所以我在这里就不多讨论了。)

如果你没有页面文件怎么办?你的程序仍然可以创建私有的已提交虚拟内存。但是全部自首次分配以来已写入的已提交虚拟内存必须始终保留在 RAM 中...直到被释放(通常是通过结束创建它的进程)...因为 Windows 没有其他地方可以保存它。

“提交限制”——即您至少提交了一次的虚拟内存量因此,有 - 就是您的 RAM 大小加上您页面文件的当前大小。(如果您启用了页面文件扩展,则提交限制会随着页面文件的增大而增大。)

如果您查看 Windows 7 中的任务管理器,“性能”选项卡,您将看到如下提示:

Commit (MB) 893 / 4095

这说明我的提交量为 893 MB,提交限制为 4095 MB,即 4 GB。(这是来自运行 Windows 7 的虚拟机。它有 2 GB“RAM”和 2 GB 页面文件 - 因此提交限制为 4 GB。)

当程序尝试分配已提交的虚拟内存时,会出现“内存不足”错误消息,由于系统的“提交费用”已达到或接近“提交限制”,因此无法授予该请求 - 足够接近该请求(如果授予该请求),则需要提交费用超过极限。

请注意,只有在尝试“提交”请求后,您才会看到此消息但失败了。因此,当您查看任务管理器时,问题的原因可能并不明显。

假设您还剩下 1 GB 的提交限制,而某个程序试图在一次调用中分配 1.5 GB。(这种情况并不常见,但确实会发生。)内存管理器将拒绝该请求,您将看到弹出窗口。但是,当您查看任务管理器时,您仍会看到提交费用与之前相同,仍有 1 GB 未使用!令人困惑。任务管理器、资源监视器甚至性能监视器中都没有任何内容告诉您请求了多少。

(sysinternals.com 的进程监视工具可能会有所帮助。)

该错误消息实际上应该说类似“尝试提交(请求的大小)超过提交限制”,尽管这需要人们查找“提交限制”的含义,但它会更有用。好吧,这远不是 Windows 中唯一没有太大帮助的错误消息 - 或我曾经使用过的任何其他操作系统中。(他们至少可以在系统事件日志中放入更多详细信息!)

请注意,每当你谈论 Windows 上的“内存”时,你都应该总是限定一下 - 您指的是“虚拟内存”还是“物理内存”?很多人说“内存”,其实他们可能指的是其中任何一个。很多人说“RAM”,其实他们指的是虚拟内存。这只会让大家更加困惑。

正如我之前所说,计入提交费用的内容是一种虚拟内存。提交限制是您可以拥有的该类型虚拟内存的最大数量。您可以通过添加更多 RAM 和/或增加页面文件大小来增加提交限制。

但是我有足够的 RAM!

我不明白为什么需要使用 12GB RAM 的虚拟内存。

这是一个完全可以理解的问题。也是一个很常见的问题。我再次指责微软没有更好地解释这件事。

简而言之:您需要一个页面文件,因为您的工作负载试图分配比 RAM 更多的“已提交的虚拟地址空间”。

首先,术语:Windows 是总是使用虚拟内存,无论你是否有页面文件。删除页面文件只会阻止分页到磁盘对于已提交的虚拟内存;已提交的虚拟机仍然存在,并且仍然是虚拟的,除了可分页到磁盘之外。

但是另一种主要的虚拟内存类型,即所谓的“映射内存”,仍然保留在页面中。只是没有保留在页面文件上。

所以你真正想问的是,如果你有 12 GB 的 RAM,为什么会耗尽提交限制?

嗯,那是因为无论您已经使用了多少,再加上某些程序要求的数量,都会超出您的提交限制。

即使任务管理器中报告有足够的“可用”RAM,您仍会看到该消息。相反,您可能不是看到消息 - 即提交尝试可以成功 - 即使您只有很少的“可用”RAM。因为它不是在抱怨可用 RAM。它抱怨的是提交限制不足。

您的程序可能正在尝试分配大量已提交的虚拟内存。或者您可能正在运行其他程序,而这些程序正在占用已提交的内存。

现在有一件有趣的事情:当一个进程分配已提交的内存时,它实际上并没有使用与已提交量相等的 RAM。因为它是虚拟的,还记得吗?事实上,即使没有页面文件,仅提交虚拟内存也只需要很少的 RAM。它只是说“我‘可能’想要使用最多‘这么多’已提交的虚拟内存。Windows,你能保证(“承诺”)我可以使用这么多,即使我全部使用它们吗?”

只有当程序实际写入已提交的内存(通过访问它并因此导致页面错误)时,RAM 才会真正从“可用”计数器中消失并添加到“使用中”。这是逐页发生的。如果您在已提交区域内写入 10 页(每页 4K),则将使用 10 页(40KB)的 RAM。

(如果您从中读取也会发生这种情况,但是在写入之前从新分配的虚拟内存中读取是没有意义的。)

很多时候,程序实际上永远不会访问它已提交的所有私有 vm,在这种情况下,使用的 RAM 将不等于提交的数量。(并且在具有页面文件的系统上,一些“已提交”的内容可能会移出到页面文件,以便在 RAM 中为其他内容腾出更多空间……进一步减少已提交区域使用的 RAM。)

但是 Windows 无法知道已提交区域有多少会被使用;在进行分配时,它别无选择,只能假设我“可能”会实际使用全部区域。这意味着总共需要 1 GB 的实际存储空间来保存所有区域(可能其中一部分在页面文件中,其余部分在 RAM 中)。

因此,除非所有当前“提交”分配加上新的分配小于提交限制,否则它不能授予该请求。

如果它无论如何都批准请求,那么就会有实际耗尽 RAM 的风险,即由于没有可用 RAM 而无法解决页面错误。这被认为是一个非常严重的问题。当程序试图提交虚拟内存时,无论是对操作系统还是对应用程序程序员来说,强制执行限制都要容易得多。

欲了解更多信息(好像这还不够长)

有关这一点的更多信息(以不同的方式解释),请参阅我的另外两个答案:这里(较长)使用了有些人认为有效的“银行贷款”类比。这个(更长)对操作系统内部发生的事情有更正式的解释。通常,用几种不同的方式呈现相同的概念将有助于您克服困难。

关于页面文件与 SSD

这是一个次要问题,所以我将其移到这里……

所有关于SSD的网页都明确告知禁用虚拟内存以避免磁盘磨损

抱歉,不是所有人都这么说,那些这么说的人都是错的。现代固态硬盘可以处理PB 级在开始出现问题之前写入。并且从固态硬盘的支持和问答 (msdn)

页面文件应该放在 SSD 上吗?

是的。大多数页面文件操作都是小型随机读取或大型连续写入,这两种操作都是 SSD 可以很好地处理的操作类型。

通过查看数千条跟踪的遥测数据并关注页面文件的读写情况,我们发现

Pagefile.sys 的读取次数是 pagefile.sys 写入次数的 40 倍左右,

Pagefile.sys 读取大小通常非常小,其中 67% 小于或等于 4 KB,88% 小于 16 KB。

Pagefile.sys 写入相对较大,其中 62% 大于或等于 128 KB,45% 正好是 1 MB。

事实上,考虑到典型的页面文件参考模式以及 SSD 在这些模式上所具有的良好性能特征,很少有文件比页面文件更适合放置在 SSD 上。

这里还有一个令人惊讶的事实:即使您可能需要一个页面文件来允许系统批准这些请求,但实际上写入页面文件的内容可能非常少,甚至可能没有!同样,这是因为提交的虚拟内存量和实际使用的虚拟内存量通常存在很大差异。我们所说的使用是指“写入,并相应地分配 RAM 页面”。只有实际写入的私有提交 vm 才会进入页面文件。大多数现代系统(例如您的系统,具有 12 GB RAM)不会写入和读取页面文件。尽管如此,页面文件通常是使虚拟分配成功所必需的。也许这会让您放心将其放在 SSD 上。

相关内容