Почему процесс «vmmem» потребляет много памяти и как это исправить
Начнем, пожалуй, с самого очевидного. Опытные пользователи ОС Windows 10, которые заметили, что процесс «vmmem» внезапно (!) начал потреблять для своей работы огромные объемы ОЗУ, должны в срочном порядке обратиться к тех. документации «Windows Subsystem for Linux» (WSL и WSL2).
А теперь для обычных пользователей.
В последнее время с такой проблемой часто сталкиваются обладатели ВМок (виртуальных машин) для Linux, которые настраивались через WSL2 с GUI. Определить причину таких нагрузок довольно сложно, так как возникают они спонтанно, чуть ли не в случайные моменты работы ОС. Довольно часто нагрузка на ОЗУ начинается сразу же после выхода со спящего режима.
Что такое процесс «vmmem» и почему он потребляет много памяти
WSL потребляет огромное количество памяти, даже когда, условно говоря, не работает. На актуальных сборках «десятки» на работу WSL уходило до 80% памяти, однако в последних версиях подсистемы этот порог был уменьшен до 50% (макс. 8Гб). «vmmem» — это системный процесс Windows; оперативная память для ВМ, если простыми словами.
Главная причина за чрезмерным расходом ОЗУ на «vmmem» — это предварительная настройка ВМ. Все верно, в данном случае виноват пользователь, который занимался настройкой ВМки, а именно какое количество ресурсов ПК (ЦП, ОЗУ, диск и сеть) будет выделятся на работу ВМ. Возможно, кто-то немного перегнул палку, недооценил ресурсоемкость таких задач? Хорошо, что все можно исправить.
Как исправить высокие затраты по памяти от «vmmem»
Сейчас мы покажем вам, как перезагрузить WSL через Командную строку:
- нажмите WIN+R, вставьте в пустую строку значение CMD и нажмите комбинацию CTRL+SHIFT+ENTER;
- вставьте в консоль команду wsl –shutdown и нажмите ENTER;
- если команда не сработала, перейдите с помощью системного Проводника в следующую директорию:
- C:\Users\your-username\
- [wsl2]
guiApplications=false
Примечание: Внеся вышеуказанные изменения в файл wslconfig, вы больше не сможете использовать GUI-приложения Linux на своем ПК.
Вот что мы рекомендуем: пересмотрите настройки ВМ и снизьте объем ресурсов ПК, которые будут выделяться для ее работы. Кроме того, обратите внимание на программы, работающие на фоне системы. И обязательно, обязательно установите последние обновления для Windows 10. Процесс «vmmem» — это системная служба Windows, а не какой-то вредоносный элемент, от которого необходимо избавиться.
What is this vmmem program that is using up all my CPU and memory?
Say you’re minding your own business and you discover that this process called vmmem is using up all your memory and CPU. What is this guy and how do you make him stop?
The vmmem process is a virtual process that the system synthesizes to represent the memory and CPU resources consumed by your virtual machines. In other words, if you see vmmem consuming a lot of memory and CPU resources, then that means your virtual machines are consuming a lot of memory and CPU resources.
If you want to make it stop, shut down your virtual machines.
Bonus chatter: Strictly speaking, what it actually represents is the resources of the other virtual machines, since Windows itself is running in a virtual machine under the hypervisor. You may not be explicitly using the hypervisor, but some other features are built on top of the hypervisor.
What Is Vmmem?
The vmmem process is a process that describes to you how much resources are being used by virtual machines. This process is closely associated with the virtual machine on your device. In other words, it cannot run if you don’t operate any virtual machine.
As soon as you notice that the vmmem process is consuming a lot of CPU and memory usage, it represents that the virtual machine on your PC is consuming lots of resources. Therefore, you may ask, “How to fix vmmem high memory usage and CPU usage?” Don’t fret, we’ll seek out some feasible solutions for you.
Step 1:Type cmd in the search bar to locate Command Prompt and right-click it to choose Run as administrator.
что такое vmmem windows 10
Функция сжатия оперативной памяти в Windows 10 предназначена для ускорения работы (отзывчивости) системы за счет хранения части страниц в оперативной памяти в сжатом виде. Тем самым достигается уменьшение количества обращений на чтение и запись страниц памяти из медленного (по сравнению с RAM) файла подкачки на жестком диске. Нужные данные извлекаются из более быстрой оперативной памяти быстрее, даже с учетом того, что на их сжатие/декомпрессию тратятся дополнительные ресурсы процессора.
Особенности технологии «Сжатой памяти» в Windows 10
Изначально поток, отвечающий за работу подсистемы сжатой памяти, находилась внутри процесса System, что не очень удобно с точки зрения диагностики. В Windows 10 1511 этот функционал был выделен в отдельный процесс — Система и сжатая память (System and compressed memory).
В Windows 10 Anniversary edition (1607) появился отдельный процесс Сжатая память (Memory Compression), скрытый от диспетчера задач. Получить информацию об этом процессе можно с помощью PowerShell командлета Get-Process:
Также информацию об использовании сжатой памяти системой можно получить с помощью диспетчера задач. Перейдите на вкладку Производительность (Performance), выберите раздел Память (Memory). Текущее значение использования сжатой памяти отображается в значении параметра Использование (сжатая). В моем примере используется 3 Гб памяти, из которой в сжатом виде хранится 230 Мб. Чтобы понять, какой объем данных получилось упаковать в сжатый блок, нужно навести мышкой на график Структура памяти:
Используется сжатой памяти (230 Мб). В сжатой памяти хранится примерно 1012 Мб данных, освобождая для системы 782 Мб памяти.
Как вы видите, уровень компрессии достигает почти 400%, так что экономия довольно большая.
В большинстве случаев, если компьютер работает нормально и на нем установлен достаточный объём оперативной памяти, процесс «Сжатой памяти» работает отлично и не требует никакого вмешательства.
Процесс «Система и сжатая память» сильно грузит компьютер
Но иногда случается, когда процесс «Система и сжатая память» начинает довольно сильно грузить процессор или жесткий диск компьютера (вплоть до 100%, это видно в диспетчере задач), или же занимаеть в памяти слишком много места. Компьютер, при этом, естественно, начинает сильно тормозить и подвисать.
Что делать в этом случае?
Я приведу 2 совета, которые должны помочь исправить проблему с высокой загрузкой системы процессом «Сжатая память».
Если указанные манипуляции не помогли, можно попробовать отключить сжатую память.
Как отключить сжатую память в Windows 10
Если вы хотите проверить стабильность работы Windows 10 без использования функции «сжатой памяти», можно временно отключать эту функцию. Для этого, откройте консоль PowerShell с правами администратора. Проверим, включена ли сейчас опция «Сжатой памяти»:
Строка MemoryCompression : True указывает на то, что сжатая память включена.
Отключим сжатую память:
И перезагрузим компьютер
После загрузки проверьте, как ведет себя система. Если производительность улучшилась, можно оставить ОС в режиме с отключенным режимом сжатой памяти.
Чтобы включить MemoryCompression, выполните команду:
Заключение
Технология «Сжатой памяти» в Windows 10, как правило работает довольно эффективно и не требует никаких вмешательств. В том случае, если она вызывает проблемы на вашем компьютере, скорее всего у вас имеются некоторые проблемы с настройками системы, оборудованием или драйверами. В случае необходимости, функцию сжатия памяти можно совсем отключить.
В некоторых случаях пользователям для исправления проблемы со сжатой памятью рекомендуют:
В некоторых случаях эти советы помогают избавится от чрезмерной нагрузки на компьютер со стороны процесса «Сжатая память», но при этом отключаются базовые подсистемы оптимизации производительности Windows, что может негативно сказаться на других аспектах производительности системы.
Процесс Vmmem — что это?
Приветствую друзья! Сегодня мы поговорим про один процесс, который вы можете заметить в диспетчере задач… название его — Vmmem. Постараемся выяснить — зачем он нужен? Это может быть процесс вполне легальной программы, но это может быть и вирус.. поэтому давайте разбираться))
Описание
Процесс Vmmem — это оперативная память, которая выделена для использования виртуальной машиной (Hyper-V).
Простыми словами — виртуальная машина, это в некотором смысле виртуальный компьютер, который имеет свой процессор, свою оперативку. Сколько виртуальная машина (или несколько) потребляет памяти — столько примерно и будет кушать оперативы процесс Vmmem.
Разбираемся
Чтобы отключить процесс Vmmem, попробуйте следующее:
Можно также ограничить ресурсы Vmmem путем создания файла %UserProfile%\.wslconfig, внутри которого прописать:
[wsl2]
memory=6GB # Ограничиваем память для WSL2 VM.
processors=5 # Ограничиваем количество процессов для WSL2 VM.Вот пример сколько процесс может потреблять оперативки (это еще далеко немного):
Картина может быть и такой, здесь уже намного больше используется:
Заключение
Удачи и добра, до новых встреч друзья!
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Что делать, если невыгружаемый пул в Windows 10 занимает всю память
Просмотр запущенных приложений в Диспетчере задач — это первое, с чего всякий пользователь начинает поиск причин медленной работы компьютера. И вроде бы и с процессами всё нормально, и с дисками, но на вкладке «Производительность», если выбрать «Память», можно увидеть, что она практически вся занята и уходит в невыгружаемый пул памяти. Это означает, что имеет место утечка памяти и неважно какой объем ОЗУ имеется на ПК, в невыгружаемый пул она может уйти вся без остатка.
Основной причиной утечки в таких случаях является некорректное взаимодействие сетевых драйверов с драйверами мониторинга использования сети, хотя нельзя исключать наличия проблем с другими драйверами аппаратных компонентов ПК.
Неполадка может показаться серьёзной, на самом же деле она легко устраняется. Способов исправления существует несколько. Самый простой заключается в отключении службы мониторинга сетевой активности. Для этого откройте командой regedit редактор реестра и перейдите по следующему пути:
Эту же настройку следует проверить в ключе:
Результат будет аналогичным.
В обеих случаях для вступления новых настроек в силу потребуется перезагрузка компьютера. После этого утечка в невыгружаемый пул памяти должна прекратиться. Это самый простой и эффективный способ, но есть также и другие варианты. Например, можно установить приложение Killer Network Manager, найти в его настройках опцию управления пропускной способностью и отключить её.
Если драйвера для сетевой карты скачивались с сайта производителя, попробуйте их удалить и дать Windows 10 установить свои драйвера. Если проблема наблюдается с драйверами Microsoft, поступаем наоборот, скачиваем для карты Killer Network драйвера с официального ресурса производителя и устанавливаем их. Выше упоминалось, что утечку памяти могут вызывать не только сетевые драйвера. Определить проблемный драйвер можно с помощью утилиты Poolmon, но для этого потребуется установить набор инструментов разработки драйверов для Windows.
Скачав WDK для вашей версии Windows 10 с официальной страницы Microsoft.
Теперь откройте командную строку от имени администратора, перейдите в расположение C:\Windows\System32\drivers и выполните команду:
findstr /m /l /s Name *.sys
Где Name — имя, то есть тэг записи.
В результате вы получите список драйверов, которые с большей или меньшей долей вероятности являются источниками проблемы. Далее уже решаем, что с ними делать: удалять, заменять или откатывать к более ранним версиям.
2 комментария
Здравствуйте. в моем случае невыгружаемый пул остановился на 1,7 гб, это так и должно? У меня мат.плата от MSI
Смотря по тому, сколько у Вас имеется памяти. Если 8 Гб, то в общем терпимо. Ну и учитывайте, что невыгружаемый пул растет при скачивании чего-либо, проверьте, закрыв все программы, что используют интернет-соединение.
Comments
emin-ec commented Aug 9, 2020
Environment
Steps to reproduce
Use the following in c:\Users\ \.wslconfig :
Expected behavior
The Vmmem process should not be using 50% CPU with Very high power usage when:
I don’t mind the memory usage but the CPU usage, power drain, and running the fan at full power are really annoying.
Actual behavior
The text was updated successfully, but these errors were encountered:
therealkenc commented Aug 9, 2020 •
You’ve got a load average of
300% of the time, ie pegged) inside the VM, so that looks «about right». That vmmem isn’t also pegged at 100% (vs only 50%) might be #5423.
emin-ec commented Aug 10, 2020
300% of the time, ie pegged) inside the VM, so that looks «about right». That vmmem isn’t also pegged at 100% (vs only 50%) might be #5423.
Thank you for that information. I confirm that if I kill processes to reduce load then vmmem CPU usage goes down to a reasonable level.
I guess I was confused by the name vmmem and thought it had to do with virtual memory (i.e., swap). Based on further search (e.g., https://devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265) it seems like vmmem also represents CPU usage of virtual machines completely independent of whether they are using virtual memory or not.
If you could confirm the above understanding or give a description or pointer to what vmmem does, that might be useful for others who are similar confused.
In any case, I will close this issue. Thanks again.
Внутреннее устройство памяти Microsoft Hyper-V
В статье были описаны методы доступа к памяти гостевых разделов Hyper-V, создаваемых в самых разных случаях
Память гостевых ОС.
Программное обеспечение, используемое в статье (операционные системы с патчами от августа 2019):
Windows 10, build 1903 x64
Windows Server 2019
Windows Server 2016
Visual Studio 2019
PyKd плагин для WinDBG
Термины и определения:
— WDAG – Windows Defender Application Guard.
— Full VM (виртуальная машина) – обычная полноценная виртуальная машина, созданная в Hyper-V manager. В отличие от контейнеров WDAG, Windows Sandbox, docker в режиме изоляции Hyper-V.
— Root ОС – операционная система, в которой установлена серверная часть Hyper-V.
— Гостевая ОС – операционная система, которая работает в контексте эмуляции Hyper-V, в т.ч. используя виртуальные устройства, предоставляемые гипервизором. В контексте статьи, это могут быть как Full VM, так и контейнеры.
— TLFS – документ Hypervisor Top-Level Functional Specification 5.0.
— GPA (guest physical address) – физический адрес памяти гостевой операционной системы.
— SPA (system physical address) – физический адрес памяти root ОС.
— Гипервызов (hypercall) – сервис гипервизора, вызываемый посредством выполнения команды vmcall с указанием номера гипервызова.
Исходники драйвера доступны на github.com:
Python-скрипт для вывода информации о GPAR и MBlock-объектах
Технологии виртуализации компании Microsoft давно и прочно вошли в нашу жизнь как в серверном сегменте, так и в клиентских ОС. Они используются не только для запуска гостевых ОС, но и для работы защитных механизмов, таких как Virtualization Based Security (VBS), Credential Guard, Device Guard, Hypervisor Code integrity (HVCI).
Компонент Hyper-V впервые появился в Windows Server 2008 и предоставлял достаточно простые на тот момент возможности по созданию гостевых операционных систем. Но Microsoft активно развивает эту технологию, и в настоящее время она глубоко интегрирована в ядро операционной системы Windows. Корневым компонентом является модуль hvix64.exe для процессоров Intel, hvax64.exe для процессоров Amd и hvaa64.exe для ARM.
Также описание архитектуры памяти Hyper-V (помимо TLFS) было сделано Andrea Allievi (www.andrea-allievi.com/files/Recon_2017_Montreal_HyperV_public.pptx) на конференции Recon 2017. Но слайды довольно абстрактно описывают модель реализации, и сопоставить эту информацию с реальным кодом, понять, что и как работает, очень сложно. Презентация была сделана до того, как Microsoft опубликовала символьную информацию компонентов виртуализации, так что, возможно, причина в этом.
В 2018 году Microsoft выпустила WDAG, которые представляет из себя надстройку к браузеру, запускающую браузер Microsoft Edge в контейнере Hyper-V со slim RDP-фронтендом, что создаёт ощущение, как будто вы работаете непосредственно в браузере. Подобные технологии очень давно использовала компания Citrix в своих терминальных решениях. У меня появилось желание понять, как же работает WDAG.
Доработка этой утилиты помогла лучше понять, каким образом работают виртуальные машины и контейнеры Hyper-V, а также каким образом получить доступ к памяти гостевых ОС различными способами.
Сперва я планировал написать отдельную статью про контейнеры Hyper-V, но учитывая количество компонентов (см. скриншот), провести полное исследование слишком трудоёмко.
Сам гипервизор находится в изолированной области памяти, память root-ОС отображается 1 в 1, возможность чтения памяти средствами гипервизора с помощью гипервызова HvReadGpa отсутствует (отдельная блокировка в коде для раздела с идентификатором, равным 0, т.е. для root-ОС). Основные моменты работы подсистемы памяти описаны в TLFS.
Так что основной упор будет сделан на методы доступа к памяти гостевых ОС. Будут описаны механизмы работы памяти для обычных виртуальных машин Microsoft и контейнеров WDAG и Windows Sandbox. Docker будет упомянут кратко и только в контексте Hyper-V, т.к. это отдельная экосистема, которой и так посвящено огромное количество ресурсов.
В ходе исследования был создан драйвер hvmm.sys, который может читать содержимое памяти гостевой ОС напрямую из root-ОС минуя интерфейсы гипервизора и драйвера vid.sys. Драйвер hvmm.sys был интегрирован в проект LiveCloudKd.
В целом статья представляет материал в стиле Windows Internals и описывает то, как работает память ОС. Зачем? Чтобы узнать, как работает достаточно популярная технология Microsoft. Также может пригодиться специалистам, увлекающимся форензикой и разбирающим дампы памяти. Andrea Allievi готовит детальное описание актуальной версии Hyper-V для 2-й части 7-й версии книги Windows Internals, но пока книга не была издана, можно будет почитать эту статью и кратко ознакомиться с архитектурой памяти.
К сожалению, информация о структурах в символах для vid.sys отсутствует, поэтому название таких структур в статье выполнено произвольно исходя из сигнатур, которые в них присутствуют. Andrea Allievi упоминал “bucket” структуры в своей презентации, но как конкретно они реализованы в драйвере vid.sys – неизвестно. Если в следующей части Windows Internals будет детальное описание этих структур, то наименования будут исправлены, технические детали работы от этого не изменятся.
Работа с памятью Full VM и контейнеров посредством прямого доступа
Основным процессом, который управляет работой виртуальной машины, является vmwp.exe. Его запускает vmms.exe в случае запуска полноценной виртуальной машины, или vmcompute.exe в случае запуска контейнеров. При запуске процесс vmwp.exe через интерфейс vid.dll обращается к интерфейсам гипервизора – гипервызовам (hypercalls). Я собрал статистику гипервызовов для VM Windows Server 2019, контейнера Docker в режиме изоляции Hyper-V (образ nanoserver:1809) и контейнера WDAG. WDAG-контейнер генерирует слишком много гипервызовов, поэтому из-за торможения, вызванным записью результатов отладчиком, контейнер сразу начал выключаться после включения (управляющее приложение контролирует таймауты выполнения некоторых процедур), в связи с чем результаты по WDAG содержат общий показатель (надеюсь попробовать dtrace, относительно недавно доработанный под Windows, для сбора подобной статистики – по идее, он должен снизить издержки на запись собранных данных). Отдельно зафиксирован показатель по выключению, так что порядок оценить можно. По сравнению с обычными виртуальными машинами он достаточно большой:
Какие категории гипервызовов можно выделить? Создание раздела, установка его свойств, создание, виртуальных процессоров, виртуальных портов (используются для отправки сигналов, сообщений), установка перехватов (interceptions), и различные гипервызовы для работы с памятью.
Функция winhvr!WinHvMapGpaPagesFromMbpArrayScanLargePages. В Rdx указывается номер страницы, в rsi – размер (так же в страницах).