4

И почему он хочет иметь максимум вдвое больше этой суммы? Моя система имеет 32 ГБ оперативной памяти, а Windows по умолчанию устанавливает как минимум 16 МБ виртуальной памяти, выделяя 32 ГБ (!) и рекомендует 50 ГБ (!!). Еще хуже в системе с 64 ГБ ОЗУ, где рекомендуется выделять более 100 ГБ, хотя она "только" снова использовала тот же объем, который был доступен в ОЗУ, в данном случае 64 ГБ.

Насколько я понял, концепция файла подкачки заключается в том, что Windows расширяет его только тогда, когда это необходимо, и запускается с минимальной суммы, хотя она никогда этого не делает, она всегда достигает абсолютного максимума. Это очень раздражает, потому что отключение файла подкачки или не установка равного ему объема установленной ОЗУ вызывает проблемы в некоторых программах, которые используют много памяти, например, 7zip, они просто утверждают, что не хватает памяти для выделения, даже если достаточно много свободной полезной памяти.

Такое поведение может значительно сократить срок службы моих накопителей (SSD). Почему Windows делает это и как я могу предотвратить это, или, наоборот, как я могу полностью отключить файл подкачки, не получая странного поведения в некоторых программах.

1 ответ1

5

Во-первых, это огромная ошибка (не ваша), что диалог Windows, в котором вы устанавливаете размер файла подкачки, приравнивает файл подкачки к "виртуальной памяти". Файл подкачки является просто резервным хранилищем для одной категории виртуального адресного пространства, которое используется частной выделенной памятью. Существует виртуальное адресное пространство, которое поддерживается другими файлами (сопоставленными файлами), и есть vas, который всегда недоступен для страниц и поэтому всегда остается в оперативной памяти. Но это все "виртуальная память", в которой, по крайней мере, всегда работает перевод с виртуальных адресов на RAM.

Ваше наблюдение верно: распределение размера файла подкачки в Windows использует простой расчет по умолчанию = объем ОЗУ и максимальный = в два раза больше. (Раньше было 1,5x и 3x.) Они должны что-то установить, и эти факторы обеспечивают результат, которого почти всегда достаточно. Это также гарантирует достаточно места в файле подкачки, чтобы перехватить дамп памяти в случае сбоя системы (при условии, что вы включили ядро или полный дамп).

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

Ах ... это начинается с "начального размера". Это НЕ "минимально допустимый". Вот почему вы видите его в своем объеме оперативной памяти, потому что Windows использует это для начального размера.

Но ... вы хотите сказать, что фактический размер файла подкачки достигает максимального значения? Например, если задано начальное значение 16 ГБ, максимальное значение 32 ГБ, вы видите фактический размер ("выделенный в данный момент") в 32 ГБ? Он всегда должен вернуться к первоначальному размеру при перезагрузке, кстати.

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

Операционная система не собирается увеличивать файл подкачки, если что-то на самом деле не пыталось выделить столько частной выделенной памяти, что ей требуется увеличенное пространство файла подкачки для хранения материала. Но, может быть, что-то есть. Взгляните на вкладку "Процессы" в диспетчере задач. Столбец "Размер коммита" показывает это для каждого процесса. Нажмите на заголовок столбца, чтобы увидеть, кто это свинья. :)

Это очень раздражает, потому что отключение файла подкачки или не установка равного ему объема установленной ОЗУ вызывает проблемы в некоторых программах, которые используют много памяти, например, 7zip, они просто утверждают, что не хватает памяти для выделения, даже если достаточно много свободной полезной памяти.

Это связано не с доступной оперативной памятью, а с тем, что называется "зафиксировать заряд" и "зафиксировать лимит". "Лимит фиксации" - это сумма (RAM - нестраиваемая виртуальная память) + текущий размер файла подкачки. (Не свободная RAM, просто RAM.) Таким образом, система с, скажем, 8 ГБ ОЗУ и 16 ГБ текущего файла подкачки будет иметь предел фиксации около 24 ГБ ("примерно", потому что ОЗУ, содержащее нестраиваемое содержимое, не учитывается в пределе фиксации).

"Комиссионный сбор" - это количество частного адресного пространства, которое в данный момент существует в системе Это должно быть меньше предела фиксации, в противном случае система не может гарантировать, что материал имеет место.

На вкладке Performance диспетчера задач вы можете увидеть эти два числа с надписью «Commit (GB)». Например, я смотрю на машину с надписью "Commit (GB) 1/15". Это 1 ГБ текущего коммит-заряда из 15 ГБ.

Если такая программа, как 7zip, пытается сделать, например, VirtualAlloc размера> the (commitLimit - commitCharge), то есть больше, чем "оставшийся" предел фиксации, то если ОС не может развернуть файл подкачки, чтобы сделать предел фиксации достаточно большим, запрос выделения не выполнен. Это то, что вы видите, происходит. (На самом деле в Windows нет сообщения об ошибке "недостаточно физической памяти", а не для доступа в пользовательском режиме! Только для виртуальных.)

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

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

Мне кажется, что 7zip слишком агрессивен в попытке выделить vas, может быть, он масштабирует свои запросы в зависимости от размера вашей оперативной памяти? Вы уверены, что нет более мелкой настройки файла подкачки, где 7zip был бы счастлив? Используете ли вы 32-битную или 64-битную версию 7-zip? Использование 32-разрядной версии исправило бы это, поскольку не может использовать более 2 или 3 ГБ виртуального адресного пространства. Конечно, это может быть не так быстро на огромных наборах данных.

Такое поведение может значительно сократить срок службы моих накопителей (SSD).

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

Если вы хотите посмотреть, сколько на самом деле в вашем файле подкачки, используйте утилиту PerfMon. Существует группа счетчиков для файла подкачки, и вам, конечно, нужен счетчик «% использования». Интерпретируйте этот процент в соответствии с фактическим размером файла (как показано в Проводнике).

Он занимает много места, и поскольку пространство на SSD довольно дорого, это беспокоит большинство из нас. Одна вещь, которую вы можете попробовать, - это разместить файл подкачки разумного размера, скажем, 4 или 8 ГБ, на вашем SSD, затем подключить диск с вращающейся ржавчиной и поместить на него большой файл подкачки. Или, если вам нужен SSD и ничего больше для вашего файла подкачки, купите дешевый маленький файл только для второго файла подкачки.

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