Зафиксированный заряд заполнен на 100%, а физическая память - только на 60% при отсутствии файла подкачки

25

Я отключил файл подкачки в моей системе (жесткий диск слишком медленный, не могу сразу купить новый, не могу переместить файл подкачки в другой раздел). Когда я смотрю в Resource Monitor, используя приложения, требующие памяти, система показывает, что фиксация заряда почти на 100% заполнена. Действительно, если я продолжаю требовать больше памяти, программы начинают аварийно завершать работу, поскольку эффективный заряд достигает 100%.

Между тем, система говорит, что я использую только 50-60% физической памяти и у меня доступно около 1 ГБ памяти (бесплатно + режим ожидания).

Если для фиксации фактически запрашивается общий объем памяти, почему система говорит, что столько памяти свободно? Windows не использует физическую память? График памяти неправильный? Я что-то пропустил?

График фиксации заряда против графика физической памяти Диспетчер задач

Джейсон Овьедо
источник
2
Еще один хороший ответ на эту тему здесь: brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7 .
CNST
@cnst Очень хорошая статья. Это помогло мне лучше понять эту проблему. Почему вы не публикуете это как ответ?
Джейсон Овьедо
2
Пожалуйста, не отключайте людей из вашего файла подкачки. Это глупая идея
Милни
@ Милни Я согласен, обычно не следует отключать файл подкачки. На момент вопроса это имело смысл для меня, поскольку диск был слишком медленным, настолько сильно, что наносил вред моей системе. На самом деле это было весьма полезно, кроме того, что этот вопрос вызывал общую реакцию системы, которая улучшалась во много раз.
Джейсон Овьедо
@JasonOviedo Это не должно иметь место и указывает, что что-то очень неправильно. Предоставление системе большего количества опций НЕ должно замедлять работу. Система не должна использовать файл подкачки только потому, что он у него есть. (Это означает, что это, вероятно, вопрос XY. Правильный вопрос - именно то, почему файл подкачки замедлил работу вашей системы.)
David Schwartz

Ответы:

26

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

Лимит фиксации = текущий размер файла подкачки + размер оперативной памяти.

Поскольку у вас нет файла подкачки, ограничение на коммит будет меньше, чем если бы у вас был файл подкачки. Неважно, сколько оперативной памяти свободно . Для лимита фиксации имеет значение только количество установленной оперативной памяти . Вы можете исчерпать лимит коммитов, даже если 90% вашей оперативной памяти свободно или доступно.

Фиксация заряда - это количество виртуальной памяти, а не физической. Предположим, что моя программа запрашивает выделенные 2 ГБ, но затем она получает доступ только к 0,5 ГБ. Оставшиеся 1,5 ГБ никогда не сбиваются, никогда не выделяются в ОЗУ, поэтому использование ОЗУ не отражает 2 ГБ, только 0,5 ГБ.

Тем не менее, «системная фиксация» увеличивается на 2 ГБ, потому что система «зафиксировала», что БУДЕТ место для хранения моих 2 ГБ, если мне это действительно понадобится. Тот факт, что при любом запуске программы я не обязательно буду пытаться использовать все это, не помогает. Я попросил 2 ГБ, и успешное возвращение с этого звонка говорит мне, что ОС «зафиксировала» - то есть пообещала - что я смогу использовать такое большое виртуальное адресное пространство. ОС не может дать такое обещание, если не найдется место, где можно все это сохранить.

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

Смотрите также мои ответы здесь (дольше) и здесь (намного дольше).

Джейми Ханрахан
источник
3
В частности, прежде чем Windows выделит память, она хочет быть в состоянии гарантировать, что она может выполнить эти выделения, когда они используются. Даже если выделенные ресурсы не используются полностью, Windows откажется выделять больше, если не может предоставить такую ​​гарантию. Файл подкачки, используется ли он или нет, обеспечивает дополнительное резервное хранилище.
Боб
4

Как показано в тесте на распределение памяти в статье по адресу http://brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7/ , Windows - это тип системы, которая не справляется с большим выделением памяти если такое распределение, вместе со всеми предыдущими распределениями (концепция, которую Microsoft называет «commit»), приведет к тому, что общий «commit» превысит сумму как физической памяти, так и суммы всех файлов подкачки (swap).

Учтите, что выделение само по себе не использует никакой фактической памяти (ни физической, ни подкачки) до чтения или записи в виртуальном адресном пространстве процесса для вышеупомянутого выделения. Например, выделение 2 ГБ само по себе будет влиять только на числа «Фиксация» (в Windows 7 talk), оставляя «Физическую память» в покое (пока не произойдет чтение / запись в пределах указанного выделения).

Что касается проектирования ОС, альтернативный подход состоит в том, чтобы всегда разрешать выделение любого размера (если доступная память уже полностью не исчерпана), а затем разрешать приложениям отказывать при чтении / записи. См. Https://cs.stackexchange.com/questions/42877/when-theres-no-memory-should-malloc-or-read-write-fail для получения дополнительной информации.

CNST
источник
2
Да. Аргумент для подхода Windows: разумно ожидать, что программисты будут проверять состояние malloc (или, в Win32, VirtualAlloc). Как только этот вызов завершится успешно, программа может поверить, что выделенный сосуд пригоден для использования и останется таковым до соответствующего свободного или VirtualFree. С другой стороны, обычное чтение и запись в память (т. Е. Разыменование указателей) может вызывать исключения при доступе к памяти. Но ни один программист не ожидает проверки статуса после каждой разыменования указателя. В любом случае они не возвращают статус, так что это должно быть сделано с помощью обработчика исключений. Некрасиво.
Джейми Ханрахан
2

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

http://support.microsoft.com/kb/312628

Что касается отсутствия файла подкачки, это очень плохо. Винда деградирует плохо без таковой. Помните, что даже исполняемые файлы используются в качестве файлов подкачки, когда нет файла подкачки. Даже если диск работает медленно, лучше иметь файл подкачки, пока вы не получите до 8-16 гигабайт памяти. Некоторые люди думают, что даже Windows 7 может работать без него.

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

Когда все это будет сделано, дефрагментируйте ваш жесткий диск. В этот момент воссоздайте свой файл подкачки. Это будет ближе к передней части диска, насколько это возможно. Создайте фиксированный размер примерно в 1,5 раза памяти. Это мое правило, обычно я видел размеры от 1 до 3 времен памяти. Это даст ему небольшой прирост скорости по сравнению с обычными местами, где он будет размещен.

Я использую auslogic defrager, это бесплатно (хотя объявления для большего количества инструментов). Есть и другие, которые делают это тоже. Проверьте дефрагментаторы на portableapps.com. Он оптимизирует диск, помещая недавно использованные файлы рядом с передней частью диска для более быстрого доступа. Он показывает, где размещен файл подкачки, чтобы вы могли видеть, переместили ли вы его на верхние 25% диска.

После этого переустановите приложения и скопируйте обратно свои данные.

Я бы сказал, что вы получите повышение на 10 или 20%. Но главная ценность в том, что многие колебания уходят для более плавного опыта.

Нельсон Асиновски
источник
3
Используя некоторое тестирование, для меня ясно, что когда диск слишком медленный, отсутствие файла подкачки действительно ускоряет работу системы. Я могу сказать разницу в несколько секунд в простых задачах, таких как переключение приложений.
Джейсон Овьедо
@ Марк Ты ошибаешься. Подавляющее большинство систем Windows работают с файлом подкачки (потому что именно так Windows работает по умолчанию, по уважительной и достаточной причине), и почти во всех из них используются диски одинаковой скорости. И почти никто из них не показывает таких проблем. Проблема не в «файле подкачки», а в том, что у вас недостаточно оперативной памяти. Обратите внимание, что избавление от файла подкачки не устраняет подкачку на диск и с диска - оно просто удаляет один из обычно сотен файлов, которые обычно участвуют в подкачке.
Джейми Ханрахан