Windows 10, «Системный» процесс, занимающий огромное количество оперативной памяти

83

После обновления до Windows 10 моя система потребляла слишком много оперативной памяти

введите описание изображения здесь

Я немного читал и решил, что это, вероятно, утечка памяти в драйвере. Итак, я получил Windows Driver Kit и отслеживал использование памяти с помощью poolmon:

введите описание изображения здесь

Однако я не знаю, как действовать дальше. Является ли элемент с пометкой «smNp» виновником этой проблемы? Как мне перейти от фактической идентификации водителя?

Я пробовал некоторые вещи, такие как "C: \ Windows \ System32 \ drivers> findstr / s smnp . ", Но он не дал результатов. Я также взглянул на файл pooltag.txt, и вот описание, которое я нашел для него:

введите описание изображения здесь

Так что да, любая помощь будет оценена. Заранее спасибо.

Nayncore
источник
1
хорошо, я добавил информацию, которую смог найти. Проверьте их
magicandre1981
1
Это особенность системы, позволяющая фактически хранить больше информации в оперативной памяти, используя сжатие вместо подкачки на диск. @ magicandre1981 имеет правильную информацию, которая должна быть принята как правильный ответ.
Мани Гэндхэм
14 мегабайт, которые показывает poolmon, связаны с тегом smNp - это просто тривиальная сумма. Вы беспокоитесь о 1,3 ГБ в частном рабочем наборе системного процесса - зачем сосредотачиваться на 14 МБ невыгружаемого пула (которого вообще нет в рабочем наборе процесса)?
Джейми Ханрахан

Ответы:

13

Зайдя в services.msc(через Win+R) и отключив Superfetch полностью решаем это. Я не уверен, что Superfetch только что сломан, или это «по замыслу».

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

логово
источник
1
Это действительно сработало. Использование памяти для системы возвращается к ~ 0,1 МБ даже после нескольких часов использования. Спасибо!
Nayncore
26
В то время как обычно такое высокое использование памяти было бы красным флажком для утечки памяти, эта память законно используется в качестве ОСОБЕННОСТИ Windows 10 (см. Ответ magicandre ниже).
Bigbio2002
7
это не ошибка и не должно быть отключено
phuclv
6
Если функция вызывает постоянные предупреждения о недостаточном объеме памяти, это не очень хорошая функция. Теперь мой Surface Pro с 4 ГБ ОЗУ полностью непригоден для разработки, и даже на ноутбуке с 8 ГБ ОЗУ я постоянно получаю эти предупреждения. Большой палец вверх для решения!
Олег I.
94

Я посмотрел на следы xperf нескольких пользователей, и здесь функция ntoskrnl.exe!SmKmStoreHelperWorkerядра начинает выделять память.

Скриншот
(Нажмите на изображение, чтобы увеличить)

Я обнаружил это на sysinternals .

Я спросил Microsoft об этом, и ответ таков: это сделано специально. Это связано со сжатием системной памяти.

В анонсе Windows 10 Build 10525 Microsoft объяснила это немного :

В Windows 10 мы добавили новую концепцию в диспетчере памяти под названием хранилище сжатия, которое представляет собой набор сжатых страниц в памяти. Это означает, что, когда диспетчер памяти чувствует нехватку памяти, он сжимает неиспользуемые страницы, а не записывает их на диск. Это уменьшает объем памяти, используемой для каждого процесса, позволяя Windows 10 одновременно поддерживать больше приложений в физической памяти. Это также помогает улучшить отзывчивость в Windows 10. Хранилище сжатия находится в рабочем наборе системного процесса.Поскольку системный процесс хранит хранилище в памяти, его рабочий набор увеличивается именно тогда, когда память делается доступной для других процессов. Это видно в диспетчере задач и причина, по которой системный процесс потребляет больше памяти, чем предыдущие выпуски.

Поэтому вместо записи данных памяти в файл подкачки он сжимает их. И эта сжатая память показывается в системном процессе.

Microsoft также разместила больше деталей во внутреннем центре. Winbeta создал статью, которая включает в себя больше деталей.

По-видимому, причина этого была в том, что Microsoft предпочла приостановить приложения UWP, когда они не были на переднем плане, очень похоже на управление некоторыми ОС смартфонов. Пользователи Windows 8 поняли (возможно, нет), что если бы приложений не было на экране, они бы не запускались, пока пользователь не переключился на них. Подход «все или ничего» обновляется в Windows 10, добавляя слой между файлом подкачки и обычным пейджинговым действием. Теперь, столкнувшись с проблемами нехватки памяти, MM определит, какие страницы следует переместить в измененный список, в процессе, называемом обрезкой.Измененный список представляет собой вторичный список файлов подкачки, резервное копирование списка резервных файлов подкачки. Список резервных копий записывается в том случае, если память восстанавливается из резервного списка другим процессом, и исходный процесс ищет свою страницу. Windows 10 MM вместо всех или ничего будет сжимать неиспользуемые страницы, а не записывать их на диск. При меньшем объеме записи результатом должно быть меньшее количество дисковых операций - благодаря сжатию - и теперь больше данных может храниться в памяти.

введите описание изображения здесь

По словам команды Windows: « На практике сжатая память занимает около 40% несжатого размера, и в результате того, что типичное устройство работает с обычной рабочей нагрузкой, Windows 10 записывает страницы на диск только на 50% чаще, чем предыдущие версии ОС. «Если все пойдет по плану, пользователи Windows могут испытывать сокращение времени ожидания для всех устройств, а также увеличение продолжительности жизни в системах с жесткими дисками на основе флэш-памяти .

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

Microsoft также выпустила видео на канале 9, который объясняет эту функцию.

Сжатие памяти в Windows 10 RTM
https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM

В этом видео Мехмет Ийгун провел некоторое время, обсуждая, почему системный процесс в Windows 10 занимает немного больше памяти и почему это хорошо. Процесс, занимающий больше памяти, звучит как плохая вещь - пока я не пойму больше об управлении памятью, поиске страниц и сбоях аппаратных / программных страниц. Оказывается, что ОС выполняет некоторые умные оптимизации, которые позволяют вашим процессам обрезать часть памяти, но не обязательно выводить ее на диск. Мало того, что память сохраняется в ОЗУ, но она также сжимается, что приводит к более частым сбоям жесткого диска. Результаты должны сделать для более быстрого опыта.

В последних сборках TH2 Microsoft обновила описание в диспетчере задач и теперь также показывает, что процесс SYSTEM содержит compressed memory:

введите описание изображения здесь

чтобы избежать путаницы по поводу «высокого» использования.

В обновлении Window 10 Anniversary, которое было выпущено в августе 2016 года, Microsoft извлекла Compression, теперь показанную в псевдопроцессе, призванном Memory Compressionбольше не сбивать с толку пользователей, почему SYSTEM имеет такое большое использование памяти:

введите описание изображения здесь

Но похоже, что Taskmgr не показывает этот процесс, только ProcessExplorer / ProcessHacker могут показать его. Taskmgr показывает только объем сжатой памяти в обзоре:

введите описание изображения здесь

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

введите описание изображения здесь

В этой демонстрации 388 МБ сжимаются до 122 МБ, поэтому 267 МБ сохраняются со сжатием.

magicandre1981
источник
9
@Zaibis: я думаю, что идея заключается в том, что вы не «сбрасываете 1 ГБ». 1 ГБ зарезервировано Windows и будет использоваться для распределения. Вы не потеряли память.
Легкость гонок с Моникой
12
«Неиспользованная память - потраченная впустую память» долгое время была мантрой OS X. Похоже, Windows тоже попала на борт.
deceze
1
@ magicandre1981 Что вы подразумеваете подSystem Memory compression
user2284570
2
Я не могу ответить на это подробно. Я получил только информацию о том, что она задумана, как-то связана со сжатием памяти, и это будет объяснено в блоге. Когда я получу новую информацию, я обновлю свой пост.
magicandre1981
2
@JosiahKeller Диалог «мало памяти» о низком уровне виртуальной памяти. Это практически не связано с использованием или наличием физической памяти (ОЗУ). Они учитываются отдельно всеми современными настольными ОС.
Дэвид Шварц
0

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

Если вы интенсивно используете моментальные снимки Microsoft (снимок программного обеспечения, а не снимок аппаратного обеспечения), чем больше снимков вы сохраняете в сочетании с большими изменениями данных, то система будет потреблять больше оперативной памяти.

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

Ниже приведен крайний случай, показывающий системный процесс сервера с использованием 13 ГБ ОЗУ. Этот сервер имеет только два тома моментальных снимков с интервалом в 15 дней, и между каждым снимком записывается около 10 ТБ данных.

Использование системной памяти на 13 ГБ

Процесс System выше был ранее при 24 ГБ использования, и наблюдались следующие три поведения:

  1. После перезагрузки и входа в систему система на некоторое время зависает на пустом экране, пока не появится рабочий стол.
  2. Во время этого зависания всплывающий диспетчер задач (CTRL-SHIFT-ESC) показал рост использования системной памяти.
  3. Во время этого зависания диск с моментальными снимками тома выполнил много операций чтения, которые не отображались в системном мониторе. Хотя, поскольку диск использовал iSCSI, сетевая карта показала стабильный поток чтения около 200 Мбит / с.

Я заподозрил моментальные снимки томов, поэтому попытался удалить самый старый снимок, который мгновенно уменьшил использование системной памяти с 24 до 13 ГБ.

В этих условиях это может быть нормальным поведением, хотя я не подтвердил это с Microsoft. А пока я добавлю 32 ГБ ОЗУ на этот сервер для обработки накладных расходов на снимок.

(Примечание: это сервер резервного копирования большого объема, работающий под управлением Windows 2016 с подключенным диском iSCSI с 64 ТБ SSD. Он поддерживает в среднем три тома моментальных снимков в любой момент времени, новый создается каждые 15 дней. Существует около 10 ТБ данные записываются между каждым снимком).

Brain2000
источник
-1

Отключите prefetcher в ключе regedit: у HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParametersвас, вероятно, есть Enable Prefetcherзначение 2или 3около того, измените его на0

Далее нужно отключить Superfetchв сервисах

  1. Поиск для services.msc

  2. superfetchНажмите кнопку « Найти», propertiesзатем установите disabledи остановите службу.

Я делаю эти шаги, и когда я играю и обычно использую компьютер, и systemпроцесс использует только 28k

Grzesiek Grzychu Góra
источник
12
Это ужасная идея. Prefetch / superfetch используются по определенной причине. Если вы думаете, что можете управлять памятью лучше, чем ваша ОС, вы сильно ошибаетесь.
b1nary.atr0phy
Отключить предварительную выборку (или «очистить папку предварительной выборки») - действительно очень глупая идея. Предварительная выборка не заставляет систему использовать больше оперативной памяти. Это ускоряет загрузку exe и dll как только вы их запускаете , и только потом. Что касается SuperFetch, Microsoft по умолчанию отключает SuperFetch в системах с SSD для диска Windows; они чувствуют, что выгода не стоит того. Лично я держу его включенным, потому что у меня есть другие диски, не-SSD, на которых я хочу, чтобы SF все еще работал.
Джейми Ханрахан