В последнее время я всегда сталкивался с исключением нехватки памяти. Я установил 32 ГБ памяти для своей системы Windows, но система всегда говорит, что этого недостаточно. Многократное увеличение виртуальной памяти, даже использование другого RAID M.2 SSD в качестве памяти подкачки и изменение настроек виртуальной памяти (pagefile.sys, hiberfil.sys, swapfile.sys) также бесполезны

Что происходит с компьютером при нехватке памяти?

Недостаточно памяти находится в нестабильном состоянии. Не думайте, что каждая программа имеет тестирование или защиту от нехватки памяти. Помимо различных сбоев программы, самым серьезным является то, что драйвер дисплея вообще не может работать, и тогда вы ничего не увидите на своем экране. Если вы не можете открыть фоновый удаленный DEBUG, вы можете только перезагрузить компьютер, нажав кнопку RESET. Одна из самых тревожных вещей — это игры, необъяснимые задержки и даже сбои. Эта проблема стала особенно заметной с тех пор, как я установил свой новый экран 4K.

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

Это проблема Microsoft?

Я решил решить эту проблему. В итоге на поиск ушел целый день и есть только одно несовершенное решение.

Диспетчер задач — это основной инструмент, часто используемый для просмотра работоспособности системы. Очевидно, что управление задачами показывает, что в моей системе почти 50% доступной физической памяти, но вы все равно получаете предупреждение о нехватке памяти и просьбу освободить больше памяти. Немного странно. Как это возможно? Мы используем Microsoft Poolmon для проверки больших утечек памяти в памяти ядра, но это выглядит хорошо, и утечек на уровне ядра нет.

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

Теперь мы открываем диспетчер системных ресурсов, чтобы наблюдать за использованием памяти. Вы видите огромный объем Резервной памяти. Резервная память вырастет до 12-15 ГБ.

Доступная память = свободная физическая память + резервная память

Поскольку мы обнаружили, что проблема с режимом ожидания. Мы можем подробнее рассмотреть более подробные вопросы.

Мы используем RAMMap (отличный инструмент SysInternals) для просмотра более реалистичного использования памяти. Наконец мы нашли первопричину. Механизм превращения резервной памяти в полезную память не работает должным образом в Windows 10. В конечном итоге вся память находится в режиме ожидания, хотя система сообщает вам, что доступной памяти еще много, но система не может фактически найти свободную страницу памяти для использования.

Это действительно плохо. Основная проблема в управлении памятью. Но эта проблема возникает не на каждом компьютере. Истинная причина не ясна. Эта проблема все еще существует в последней версии Windows 10 1809. Мое наблюдение, похоже, связано с массовым использованием файлового ввода-вывода.

Решение!

Системе не удалось успешно переключиться обратно на доступную память. Затем мы должны заставить систему сделать это преобразование вручную.

Пустой резервный список

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

Итак, когда я должен использовать его? Не существует способа найти это эффективно, поэтому не кажется умным способ написать инструменты для мониторинга проблем. Возможно, самый простой способ — определить, когда делать это на регулярной основе.

Анализ эффективности:

При выполнении в течение 60 минут в режиме ожидания накопится около 5 ГБ.
При выполнении в течение 30 минут в режиме ожидания будет накоплено около 2 ГБ.

Честно говоря, это действительно не очень хорошее решение. Резервная память играет важную роль в повышении производительности системного ввода-вывода. Очистка резервной памяти может помешать этому механизму. К сожалению, мы не можем допустить Out of Memory. Это может быть моим лучшим решением, прежде чем мы или Microsoft решим проблему.

Как его запланировать:

Как и Linux/Unix/Mac Cron, Windows имеет собственное расписание. Предыдущая команда AT больше не используется. Используйте расписание системных задач, чтобы назначить задачу для запуска «Empty Standby Tool».

Откройте планировщик заданий Windows:
%windir%\system32\taskschd.msc /s

Дополнительная информация:

После обновления до 1903 эта проблема, кажется, улучшилась. Проблема с резервной памятью решена (нужны дополнительные тесты).

Мы также находим инструмент под названием PoolmonX, версию Poolmon с графическим интерфейсом. Это автономный инструмент, и вам не нужно устанавливать Windows SDK.

ПулмонХ

Еще одна утечка памяти, которую трудно отследить:

На моем новом компьютере установлено 64 ГБ оперативной памяти, но по какой-то странной причине ему все еще не хватает памяти. Это не та проблема, о которой упоминалось выше, поскольку резервная память не может быть преобразована в полезную память. Эта проблема может быть связана с утечкой драйверов или ресурсов. Еще раз, мы должны использовать инструмент RamMap, чтобы наблюдать за проблемой.

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

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

Хакер процессов

Process Hacker — это инструмент, похожий на Process Explorer. Но он предоставляет несколько хороших инструментов для наблюдения.
Чтобы отследить утечку совместно используемой памяти, о которой мы только что говорили, нам нужно вернуться и использовать встроенный в систему диспетчер задач.

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

До,

После,

Мы можем заметить, что большое количество Modified исчезло, когда проблемное приложение было закрыто. Около 3 ГБ оперативной памяти высвобождается в резервную или неиспользуемую память.

Обновление 2020.04.20,
Альтернативный способ узнать, что процесс потребляет много памяти.

Откройте Диспетчер задач -> Подробности -> Щелкните правой кнопкой мыши по заголовку списка -> Выбрать столбец -> Зафиксировать размер

Теперь вы можете отсортировать процесс по размеру фиксации.

Размер фиксации = физическая память + виртуальная память

Вы можете наблюдать за размером коммита, чтобы понять, как процесс использует память. Очень полезно обнаружить процессы с утечкой памяти.

Инструменты

Poolmon: Инструментальная форма Microsoft Windows SDK.
PoolmonX: Версия с графическим интерфейсом Poolmon. Автономный инструмент и вам не нужен SDK.
RAMMap: инструмент, который вы должны иметь для мониторинга использования памяти!
ProcessExplorer: лучший инструмент управления задачами.
ProcessHacker : Другой Process Explorer.
Пустой резервный список: освободите резервную память.