Предупреждения о нехватке памяти в Windows 10 при наличии достаточного объема памяти

25

У меня возникла проблема, из-за которой, если моя система работает в течение нескольких дней без перезагрузки, я получу предупреждение «Закрытие программ для предотвращения потери информации», а затем появится диалоговое окно с предложением закрыть программы, которые можно либо отменить, либо нажать «закрыть программы» и Windows принудительно закроет некоторые или все приложения, перечисленные в диалоговом окне.

Я открываю диспетчер задач и вижу, что в настоящее время используется только около 30% моей памяти:

33% использование

Когда я открываю монитор ресурсов, чтобы увидеть, сколько выделенной памяти используется конкретными приложениями, я все еще вижу относительно низкое использование памяти:

Монитор ресурсов

У меня была эта проблема некоторое время, и я изо всех сил пытался найти решение. Я исследовал причины, такие как утечка драйверов, с помощью poolmon, но никогда не видел в poolmon ничего такого, что соответствовало бы тому, что другие описывали как красные флаги для утечки памяти драйвера. Что меня особенно смущает, так это то, что Win10 советует мне закрывать приложения, когда используется только 33% системной памяти.

Brandon
источник
3
Попробуйте зайти в диспетчер задач и перейти на вкладку производительности. Что показывает поле выделенной памяти ?
DrZoo
Я не сохранил скриншот для него, но в моей выделенной памяти был высокий процент доступного, примерно 17,5 ГБ / 19 ГБ.
Брэндон
1
Возможный дубликат Crysis в Windows 8.1 вызывает предупреждение о
нехватке

Ответы:

15

Дикие догадки здесь.

Вы отключили свой файл подкачки, следуя чьему-то случайному совету по «оптимизации».

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

Включите файл подкачки.

Как я уже сказал, дикая догадка.

Зан Рысь
источник
Ну, у меня установлен размер файла подкачки не более 3 ГБ. Это то, что вы имеете в виду под swapfile или это отдельно управляемая вещь в Windows 10? Не исключено, что я сделал бы что-то подобное, у меня были очень плохие проблемы с производительностью, когда я впервые собрал эту машину в 10/2015 и попробовал несколько вещей, таких как отключение базовой парковки, чтобы исправить это. В итоге появилась схема управления питанием, которая уменьшала мое энергопотребление до 10% и не давала покоя всем компонентам, и именно поэтому у меня были проблемы с системной производительностью, но, возможно, я мог сделать что-то, как вы сказали в этом эпизоде.
Брэндон
1
Измените размер файла подкачки на «Управляемый системой», и ваши проблемы, вероятно, исчезнут.
Скотт Чемберлен
Когда-то у меня была система управления, и у меня все еще была та же проблема, потребовалось бы больше времени, чтобы проявиться. Когда я установил его на системное управление, файл подкачки максимально увеличился бы, я думаю, до 64 ГБ, а затем, когда зафиксированный уровень стал действительно высоким, я все равно получил бы те же предупреждения о нехватке памяти. Но я все еще видел бы около 70% доступной физической памяти, и в Resource Monitor не было никаких указаний на то, что более 60 ГБ памяти в настоящее время выделено для любого перечисленного процесса.
Брэндон
Я полностью согласен с Заном и Скоттом, именно ваш файл подкачки вызывает эту проблему (см. Windowsitpro.com/windows-10/… для другого источника, который также говорит об этом). Установите для системы управляемый, и если проблема обнаружится снова, ТО начните расследование.
Ƭᴇcʜιᴇ007
Таким образом, я думаю, что управляемый системой файл подкачки был основным ответом здесь. Кажется, что установка статического 3 ГБ просто не идеальна в среде Windows 10. Я реализовал это решение пару недель назад и позволил ему работать в обычном режиме, просто чтобы посмотреть, что произошло, и хотя я все еще вижу гораздо больше выделенной памяти, чем указано в столбце выделенной памяти монитора ресурсов, у меня не хватает памяти предупреждения или проблемы сейчас.
Брэндон
14

Re your last Q - короткая версия: сообщение об ошибке о «подтвержденном» виртуальном адресном пространстве. Если вы посмотрите на график Commit Charge во втором снимке экрана, то увидите, что он действительно находится на пределе или приближается к нему.

Количество ОЗУ, которое «свободно», «доступно» или «используется», не имеет значения. В частности, нехватка «доступной» оперативной памяти абсолютно не является причиной сообщения «недостаточно памяти» или «недостаточно памяти».

Лимит фиксации равен общему объему памяти и размеру файла подкачки. Когда выделенная память распределяется, она немедленно заряжается для «фиксации заряда», даже если она еще не использовалась ... это означает, что оперативная память или пространство PF не используются немедленно. Физическое пространство (будь то в ОЗУ или в файле подкачки) используется только тогда, когда на память действительно ссылаются. С этого момента оно должно иметь место, пока программа не освободит его или весь процесс не закончится.

Пример: предположим, что у вас нет файла подкачки, следовательно, ваш предел фиксации составляет 16 ГБ (ваш объем ОЗУ). Теперь предположим, что 8 процессов каждый пытается VirtualAlloc (MEM_COMMIT) 1 ГБ. Результат: размер коммитного заряда увеличен на 8 ГБ. Однако непосредственное влияние на оперативную память нет! Как будто вы купили блокнот в магазине канцелярских товаров, но на самом деле вы не получили никакой бумаги. Каждый раз, когда вам нужен новый лист, он появляется волшебным образом. Пока вы не израсходуете весь пэд (размер выделенного региона).

Теперь предположим, что каждый из этих процессов имеет доступ только к 100 МБ из 1 ГБ. Объем используемой оперативной памяти составляет всего 800 МБ.

Но поскольку каждый из них может ссылаться на все свои 1 ГБ, ОС должна гарантировать, что 8 ГБ ОЗУ + пространство подкачки ... ну, просто ОЗУ в случае отсутствия подкачки ... остается доступным на случай, если это произойдет , Возвращаясь в магазин канцелярских товаров, им нужно хранить достаточное количество бумаги, чтобы дать каждому столько листов, сколько они купили ранее.

Соответственно, ОС должна прекратить разрешать успешное выполнение VirtualAlloc (MEM_COMMIT), когда текущее зафиксированное количество достигает предела.

Зачем? Поскольку процесс, как ожидают, проверит результат VirtualAlloc, чтобы видеть, успешно ли это. После того, как он сделал это и обнаружил, что alloc успешно выполнен, процесс имеет полное право ожидать, что его последующие ссылки на весь зафиксированный регион будут успешными.

Если Windows допустила, что плата за фиксацию превысила объем доступного пространства, чтобы реализовать это пространство, то это ожидание не всегда могло быть удовлетворено.

Быстрый обходной путь - увеличить (по умолчанию) начальный размер вашего файла подкачки. Из приведенного выше объяснения вы сможете понять, почему это позволит избежать появления сообщения об ошибке, даже если в этот файл ничего не может быть записано . Опять же, ОС гарантирует, что место для всей платы за коммит будет доступно в случае необходимости . Когда процессы выделяют выделенную память, они просто говорят: «Эй, ОС, мне может понадобиться так много». Это не значит, что они на самом деле будут его использовать, и это, конечно, не означает, что они на самом деле его уже использовали.

Для получения дополнительной информации, смотрите мой ответ здесь .

Теперь .... почему вы используете столько коммитов, когда ваши процессы, кажется, не складываются в него, это другой вопрос. Чтобы начать это, откройте вкладку «Быстродействие» диспетчера задач в разделе «Память».

Джейми Ханрахан
источник
У меня нет слов, чтобы описать такой идеальный ответ. Спасибо.
Виниций Таварес
-2

Другая возможность заключается в том, что вы используете Win10 32-битный, а не 64-битный. Несмотря на то, что у вас установлено 16 ГБ ОЗУ, существуют ограничения для 32-битных ОС, которые позволяют практическое использование выше 4 пятнистых. Кроме того, ОС налагает жесткие ограничения / на процесс / на то, какой объем ОЗУ может быть запрошен, независимо от физической ОЗУ. Если это так, мало что можно сделать, кроме переключения на 64-битную ОС или одновременного запуска меньшего количества приложений.

Mekki MacAulay
источник
2
Было бы невозможно запустить 32-разрядную версию Win10, и диспетчер задач отображал бы в общей сложности 16 ГБ, как это происходит в OQ. И, между прочим, ограничения для каждого процесса зависят от виртуальной памяти, а не от оперативной памяти. Там нет никакого вызова вы можете сделать в Windows , чтобы выделить RAM как таковые . (Ну, AWE, но это требует привилегий уровня администратора, и почти ничто не использует это, кроме некоторых системных программ.) Вы выделяете виртуальное адресное пространство (скажем, с VirtualAlloc), а затем используете его; по мере использования ОС выделяет оперативную память вашему процессу («подкачка по требованию»). Но, конечно, не все это должно быть реализовано в оперативной памяти одновременно.
Джейми Ханрахан