22

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

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

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

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

3 ответа3

20

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

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

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

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

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

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

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

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 для получения дополнительной информации.

2

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .