Использование памяти виртуальной машины не отображается в TaskManager

28

Что-то в управлении памятью Windows и его отношениях с TaskManager мне не понятно, и я надеюсь, что кто-то сможет меня просветить.

Если я использую виртуальную машину (не имеет значения, является ли она Virtual PC 2007, Virtual Server 2005 или VirtualBox, поскольку они работают одинаково), и запускаю TaskManager, я вижу на вкладке процессов некоторые записи для ВМ, но Значения памяти довольно малы (около 30 МБ). Очевидно, это не включает память, фактически потребляемую самой виртуальной машиной. Ни один из различных столбцов, связанных с памятью, которые вы можете сделать видимыми, не будет работать по-разному. Использование памяти на вкладке «Производительность» соответствует общему объему памяти, включая виртуальную машину.

Итак, мой вопрос: почему использование памяти виртуальной машины (которая будет составлять 100 МБ) не отображается на вкладке «Процессы»?

Скотт Буссингер
источник

Ответы:

30

VirtualPC, HyperV и, возможно, аналогичные продукты используют то, что называется заблокированной памятью драйвера, которая не видна в Process Explorer, Task Manager и т. Д. RAMMap покажет вам заблокированную драйвером память, используемую процессом.

Sajee
источник
1
Для записи RAMMap только Vista или выше.
Тим Абелл
1
RAMMap не показывал заблокированную память для процесса, он отображал общее количество заблокированной памяти
NeDark
Просто чтобы указать на других, он не сказал, что процесс заблокирован памяти. Он сказал, что водитель заблокировал память. Так работает динамическая память. Если вам это не нравится или вы думаете, что это портит ваше приложение, вы можете просто настроить виртуальную машину для статической памяти вместо динамической. Я видел, что у некоторых java-приложений возникают проблемы при использовании динамической памяти в виртуальной машине, если установить статическую статическую исправленную ошибку .
Джон C
Какой процесс фактически выделяет эту память? Я попробовал VMMap от SysInternals и, когда вы выбираете правильный VBoxHeadless.exeпроцесс (это лист в ветви дерева процессов, т. Е. У него нет другого потомка, вы можете использовать, например, Process Explorer, чтобы найти его), эта «потерянная» память отображается как под частными байтами, так и рабочим набором этого процесса (хотя Process Explorer показывает гораздо меньше для обоих значений). Так что я немного запутался, почему они показывают разные значения, но VMMap, кажется, показывает реальное число .
Давид Ференци Рогожан
6

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

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

Джейк Ошинс
источник
Какой процесс фактически выделяет эту память? Я попробовал VMMap от SysInternals и, когда вы выбираете правильный VBoxHeadless.exeпроцесс (это лист в ветви дерева процессов, т. Е. У него нет другого потомка, вы можете использовать, например, Process Explorer, чтобы найти его), эта «потерянная» память отображается как под частными байтами, так и рабочим набором этого процесса (хотя Process Explorer показывает гораздо меньше для обоих значений). Так что я немного запутался, почему они показывают разные значения, но VMMap, кажется, показывает реальное число .
Давид Ференци Рогожан
5

Для просмотра объема памяти, используемого виртуальной машиной, необходимо убедиться, что в вашем диспетчере задач отображается столбец «Рабочий набор». Часто виден только закрытый набор.

Чтобы включить этот столбец:

1) Запустить диспетчер задач

2) Перейти на вкладку Процессы

3) Просмотр> Выбрать столбцы

4) Убедитесь, что установлен флажок «Память - рабочий набор».

Например, частный набор виртуальной машины, которую я сейчас использую, равен 43 МБ, а рабочий набор - 2,3 ГБ.

Марк Хендерсон
источник
1
Какой объем памяти использует приложение? Рабочий набор + приватный набор или просто рабочий набор?
Зендар
2
Возможно, это отличается в разных версиях Windows, но под Windows 7 это не то, что я вижу. Номера «Рабочего набора» больше, чем номера «Частного рабочего набора», но недостаточно удаленно для учета памяти виртуальной машины. Я перепробовал все столбцы, связанные с памятью, и ни один из них не сделал. Это касается как Windows Virtual PC, так и VirtualBox. Какую версию Windows и какой виртуальный хост вы используете?
Скотт Буссингер
К сожалению, нет единого числа, которое бы указывало «сколько памяти» использует процесс, поскольку вы сталкиваетесь с такими сложностями, как совместная память, файловая память, выгружаемая память и некоторые другие. Вот хорошее объяснение нескольких понятий: stackoverflow.com/questions/1984186/…
tylerl
Я не думаю, что рабочий набор говорит вам что-нибудь полезное в этом случае. Внутри виртуальной машины сообщается, что она использует около 6 ГБ памяти, в то время как процессы VirtualBox не потребляют более 100 МБ в своих рабочих наборах .
Давид Ференци Рогожан