(Виртуальная память) Windows 7 постоянно говорит "Системная память заканчивается" и закрывает программы / сбой игры

Я заметил, что мой компьютер с Windows 7 x64 очень часто говорит, что системная память заканчивается. Это происходит, когда я открываю несколько "тяжелых" программ одновременно (например, Firefox со многими вкладками, фоторедактирование, CAD и т. Д.).

Я дважды проверил используемую оперативную память через диспетчер задач, но она не достигла предела В дополнение к этому, иногда система автоматически закрывает программы.

Сегодня я попытался запустить игру с большим объемом памяти (Black Ops 3) и с первой попытки (с открытым firefox) игра вылетела. Закрывающая игра Firefox запускается правильно, но через пару минут она снова вылетает. В обоих случаях окна ошибок показывают, что я обращаюсь к памяти. Даже в консоли игрового журнала было "OUT OF MEMORY" или подобное.

Я прочитал кое-что об этой проблеме относительно Файла подкачки. Я отключил его, потому что у меня есть 250 ГБ SSD.

Я надеюсь, что кто-то может мне помочь, потому что это очень расстраивает.

Вот некоторые детали оборудования / системы:

  • Процессор: Intel Core i7-930
  • Материнская плата (МБ): ASUS P6X58D PREMIUM (Intel X58 + ICH10R)
  • Оперативная память: 12 ГБ DDR3-1600 (трехканальная), разделенная следующим образом:
    • Corsair CM3X2G1600C8 (CL8) 3x2 ГБ - [слот: 1-3-5]
    • Corsair CMX6GX3M3A1600C9 3x2 ГБ (CL9) - [слот: 2-4-6]
  • ОС: Windows 7 Профессиональная (x64)

Изменить: я добавлю больше информации, чтобы помочь. Я пытался воспроизвести ошибку, но у меня есть частичный успех. Вот результаты и информация:

Это предупреждение я обычно получаю перед ошибкой. Это веб-изображение (я не могу воспроизвести его сейчас), но содержание его правильно. Обычно в тексте предупреждения в качестве имени приложения указывается Firefox (или другая из первых запущенных мной программ). Нажмите, чтобы увидеть изображение, я не могу прикрепить их еще, потому что я новичок здесь.

Это журнал ошибок игры Black Ops 3 при запуске Firefox. В зависимости от сбоя игры также потерпел крах 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. И я обвиняю Microsoft в том, что она не объясняет ничего хорошего, не использует правильные, непротиворечивые имена для метрик на нескольких дисплеях и не предоставляет простой для поиска и отслеживания ответ на этот вопрос, несмотря на его "популярность".

Короче, твоя путаница понятна, даже ожидаема. Это не твоя вина.

Быстрый ответ

Если вы видите "недостаточно памяти", "недостаточно памяти" и т. Д., Всплывающие окна из Windows, вам действительно нужен файл подкачки. Или увеличьте размер того, который у вас уже есть.

(Или добавьте больше оперативной памяти, но это не так просто. Или попробуйте одновременно запустить меньше / меньше программ, но никто не хочет этого делать.)

Я отключил его, потому что у меня есть 250 ГБ SSD.

Извините за грубость, но это не имеет никакого смысла. Если бы вы сказали "... потому что у меня 64 ГБ ОЗУ", это имело бы смысл. Может быть. Но наличие SSD не означает, что вам не нужен файл подкачки.

Даже наличие 64 ГБ ОЗУ не гарантирует, что вам не нужен файл подкачки!

Это сообщение об ошибке фактически говорит вам, что вам абсолютно необходим файл подкачки. (Или больше оперативной памяти... или вам нужно запускать меньше и меньше или меньше).

Да, я знаю. Вы не хотите помещать файл подкачки на свой SSD. Я рассмотрю это в конце.

Когда он говорит "из памяти", это не означает, что вы думаете, что означает

Это сообщение об ошибке вызывается из-за нехватки памяти, называемой "Commit Limit". "Зафиксированный", или, скорее, "частный заем", чтобы дать ему полное имя, является типом виртуальной памяти в Windows. Вы, вероятно, знаете, что содержимое "виртуальной памяти" можно найти либо в ОЗУ, либо, если для него не хватает места, часть его хранится на диске (или SSD). Для "частной выделенной виртуальной памяти" место на диске хранится в файле подкачки. Если у тебя есть.

(Существует также "отображенная" виртуальная память, которая использует другие файлы для подкачки страниц вместо файла подкачки, и есть виртуальная память без страниц, которая должна постоянно находиться в оперативной памяти. Nonpageable vm способствует "фиксации заряда", так что если у вас есть слишком большая его часть может привести к появлению сообщения об ошибке "недостаточно памяти". Отображенная память не вносит такой вклад, поэтому я не буду обсуждать это здесь.)

Что делать, если у вас нет файла подкачки? Ваши программы все еще могут создавать частную выделенную виртуальную память. Но затем вся выделенная виртуальная память, которая была записана с момента ее первого выделения, должна постоянно оставаться в ОЗУ... до тех пор, пока она не будет освобождена (обычно путем завершения процесса, который ее создал)... Потому что Windows больше нет места для Оставь это.

Таким образом, "предел фиксации", то есть сколько выделенной виртуальной памяти, записанной в, по крайней мере, один раз, - это просто размер вашей оперативной памяти плюс текущий размер вашего файла подкачки. (Если у вас включено расширение файла подкачки, предел фиксации увеличивается, когда это делает файл подкачки.)

Если вы посмотрите на диспетчер задач, вкладка "Производительность" в Windows 7, вы увидите индикацию, которая выглядит следующим образом:

Commit (MB) 893 / 4095

Это говорит о том, что мой объем фиксации составляет 893 МБ, а мой предел фиксации составляет 4095 МБ, то есть 4 ГБ. (Это с виртуальной машины под управлением Windows 7. Она имеет 2 ГБ "ОЗУ" и 2 ГБ файла подкачки - таким образом, предел фиксации составляет 4 ГБ.)

Сообщение об ошибке "недостаточно памяти" появляется, когда программа пытается выделить выделенную виртуальную память, и запрос не может быть удовлетворен, поскольку системный "заряд" уже находится на уровне или близок к "пределу принятия" - достаточно близко, чтобы запрос, если предоставленный, возьмет на себя ответственность за лимит.

Обратите внимание, что вы видите это сообщение только после того, как запрос "commit" уже был предпринят и потерпел неудачу. Поэтому, когда вы смотрите на диспетчер задач, причина проблемы может быть не очевидна.

Предположим, у вас осталось 1 ГБ лимита, и что-то пытается выделить 1,5 ГБ за один вызов. (Это редко, но это может произойти.) Менеджер памяти отклонит запрос, и вы увидите всплывающее окно. Но затем, когда вы посмотрите на диспетчер задач, вы все равно увидите, что ваш коммит был там, где он был раньше, с 1 ГБ по-прежнему не используется! Смешение. В диспетчере задач, мониторе ресурсов или даже в системном мониторе нет ничего, что сообщало бы вам, сколько было запрошено.

(Инструмент Process Monitor от sysinternals.com может помочь здесь.)

В этом сообщении об ошибке должно быть написано что-то вроде "Попытка коммита (размер запроса) превысит лимит коммитов", и хотя для этого потребуется, чтобы люди посмотрели, что означает "лимит коммитов", это было бы гораздо полезнее. Что ж, это далеко не единственное, не столь полезное, как могло бы быть, сообщение об ошибке, которое есть в Windows - или в любой другой ОС, которую я когда-либо использовал. (Они могли бы по крайней мере поместить больше деталей в системный журнал событий!)

Обратите внимание: всякий раз, когда вы говорите о "памяти" в Windows, вы всегда должны определять ее - вы говорите о "виртуальной памяти" или "физической памяти"? Многие люди говорят "память", когда они могут иметь в виду либо. И многие люди говорят "RAM", когда на самом деле говорят о виртуальной памяти. Это только добавляет к путанице у всех.

Как я уже говорил ранее, то, что учитывается при фиксации, - это один тип виртуальной памяти. Предел фиксации - это максимальный объем виртуальной памяти того типа, который вы можете иметь. Вы можете увеличить лимит фиксации, добавив больше оперативной памяти и / или увеличив размер файла подкачки.

Но у меня много оперативной памяти!

Я не могу понять, почему мне нужно использовать виртуальную память с 12 ГБ оперативной памяти.

Это совершенно понятный вопрос. И очень распространенный. И снова я обвиняю Microsoft в том, что она ничего не объясняет.

Вкратце: вам нужен файл подкачки, потому что ваша рабочая нагрузка пытается выделить больше "выделенного виртуального адресного пространства", чем у вас есть ОЗУ.

Во-первых, терминология: Windows всегда использует виртуальную память, независимо от того, есть ли у вас файл подкачки. Избавление от файла подкачки просто исключает подкачку на диск для выделенной виртуальной памяти; Переданный виртуальный компьютер все еще существует и все еще является виртуальным, во всех отношениях, за исключением возможности переноса на диск.

Но другой основной тип виртуальной памяти, вид, называемый "отображаемой памятью", продолжает работу на странице. Только не в файл подкачки.

Итак, что вы на самом деле спрашиваете: почему у вас заканчивается лимит коммитов, если у вас 12 ГБ ОЗУ?

Ну, это потому, что сколько бы вы уже ни использовали, плюс размер суммы, которую запрашивает какая-то программа, превысит ваш лимит коммитов.

Вы можете увидеть это сообщение, даже если у вас достаточно оперативной памяти, как сообщается в диспетчере задач. И наоборот, вы можете не увидеть сообщение - т.е. попытка фиксации может быть успешной - даже если у вас мало "доступной" оперативной памяти. Потому что он не жалуется на доступную оперативную память. Он жалуется на отсутствие лимита коммитов.

Ваша программа может пытаться выделить огромное количество выделенной виртуальной памяти. Или у вас может быть запущено что-то еще, использующее коммит.

Теперь забавная вещь: когда процесс выделяет выделенную память, он фактически не использует оперативную память, равную выделенному количеству. Потому что это виртуально, помнишь? Фактически, для фиксации виртуальной памяти требуется очень мало ОЗУ, даже без файла подкачки. Это просто говорит, что "я" может "захотеть" использовать до "этой" много выделенной виртуальной памяти. Windows, можете ли вы пообещать ("зафиксировать") мне, что столько будет доступно, даже если я буду использовать все это?"

Только до тех пор, пока программа действительно не выполнит запись в эту выделенную память - получая доступ к ней и, таким образом, вызывая сбои страниц - ОЗУ фактически отключается от "доступного" счетчика и добавляется в "используется". Это происходит постранично. Если вы записываете до 10 страниц (4 КБ каждая) в выделенном регионе, это будет использовать 10 страниц (40 КБ) оперативной памяти.

(Это может произойти, если вы тоже читаете с него, но не имеет смысла читать с недавно выделенной виртуальной памяти, прежде чем писать в нее.)

Очень часто программа никогда не получит доступ ко всем частным виртуальным машинам, которые она зафиксировала, и в этом случае используемая оперативная память не будет равняться объему. (А в системе с файлом подкачки некоторые "зафиксированные" вещи могут быть перемещены в файл подкачки, чтобы освободить место в ОЗУ для других вещей... еще больше уменьшая объем оперативной памяти, используемой зафиксированным регионом.)

Но у Windows нет возможности узнать, сколько из выделенного региона будет использовано; при распределении у него нет другого выбора, кроме как предположить, что я "могу" фактически использовать все это. Это означает, что для хранения всего этого потребуется всего 1 ГБ фактического хранилища (возможно, некоторые из них находятся в файле подкачки, а остальные - в ОЗУ).

Таким образом, он не может удовлетворить этот запрос, если все текущие выделения "коммитов" вместе с новым не будут меньше предела коммитов.

Если бы он все равно удовлетворил запрос, то был бы риск фактического исчерпания ОЗУ, то есть невозможности устранить ошибку страницы из-за отсутствия ОЗУ. Это считается очень серьезной проблемой. И в ОС, и в программистах приложений гораздо проще установить ограничение, когда программа пытается зафиксировать виртуальную память.

Для получения дополнительной информации (как будто это уже не было достаточно долго)

Более подробно об этом, объясненном несколько иными способами, см. Два других моих ответа: здесь (дольше) используется аналогия "ссуды из банка", которую некоторые люди сочли эффективной. у этого (намного дольше) есть более формальное объяснение того, что происходит внутри ОС. Часто представление одной и той же концепции несколькими различными способами поможет вам преодолеть препятствие.

О файле подкачки против SSD

Это побочный вопрос, поэтому я перенес его сюда...

все веб-страницы о явном SSD говорят отключить виртуальную память, чтобы избежать износа диска

Извините, но нет, не все так говорят, а те, которые делают, просто неправы. Современные твердотельные накопители будут обрабатывать петабайты записей перед тем, как начать показывать проблемы. А также из службы поддержки и вопросов и ответов для твердотельных накопителей (msdn):

Нужно ли размещать файл подкачки на SSD?

Да. Большинство операций с файлами подкачки представляют собой небольшие случайные операции чтения или большие последовательные записи, которые являются типами операций, которые хорошо обрабатываются твердотельными накопителями.

Рассматривая данные телеметрии из тысяч трассировок и сосредотачиваясь на чтениях и записи файлов подкачки, мы находим, что

Pagefile.sys читает больше, чем pagefile.sys пишет примерно 40 к 1,

Размер чтения Pagefile.sys обычно довольно мал: 67% меньше или равно 4 КБ и 88% меньше 16 КБ.

Записи Pagefile.sys относительно велики: 62% больше или равны 128 КБ, а 45% составляют ровно 1 МБ.

Фактически, учитывая типичные эталонные шаблоны файла подкачки и благоприятные характеристики производительности, которые имеют SSD для этих шаблонов, существует немного файлов, которые лучше, чем файл подкачки, разместить на SSD.

Вот еще один удивительный факт: даже если вам может понадобиться файл подкачки, чтобы система могла удовлетворить эти запросы, на самом деле в файл подкачки может быть записано очень мало, может быть, даже ничего! Опять же, это потому, что обычно существует большая разница между тем, сколько виртуальной памяти выделяется и сколько фактически используется. Под используемым мы подразумеваем "записано, и страницы ОЗУ назначены соответственно". В файл подкачки всегда попадет только частный коммит vm, которому фактически написано. Большинство современных систем (таких как ваша, с 12 ГБ ОЗУ) не очень часто пишут и читают файл подкачки. Тем не менее, файл подкачки часто необходим для успешного размещения виртуальных выделений. И, возможно, это заставит вас задуматься о том, чтобы поместить его на свой SSD.

Другие вопросы по тегам