
Итак, из любопытства я решил посмотреть на использование оперативной памяти с запущенной виртуальной машиной Windows 7 (выделено 3 ГБ оперативной памяти). Я был... удивлен, увидев результаты, и мне интересно, почему эти результаты такие:
Диспетчер задач моего хост-компьютера (Win 8.1) показывает следующее:
Что на самом деле только показывает, насколько Chrome - это свинья... В любом случае, обратите внимание, что VirtualBox manager использует только 75 МБ ОЗУ. Ну, это разумно, в конце концов, это всего лишьменеджера не сама виртуальная машина. Но подождите, эти цифры (даже если вы сложите то, чего там не видите) не дают в сумме текущее использование оперативной памяти (9 ГБ, как указано на вкладке «Производительность»). Учитывая, что моя гостевая машина сейчас использует 1,5 ГБ, можно было бы ожидать, что она будет немного выше в списке...
Хорошо, давайте попробуем другой инструмент:RAMКарта
Для начала еще два скриншота из RAMMap:
Ну, этот кусок для «process private» выглядит примерно как 3 ГБ (если только я не ошибаюсь на порядок при беглом взгляде), но все равно — ничто, кроме Chrome, не потребляет более 100 МБ оперативной памяти.
О, эй, посмотрите на это:
Кажется, я наконец нашел, где это... но что это? VBox обрабатывает гостевую оперативную память как файл, который он просто загружает в оперативную память? Это... что-то совсем другое? Почему Windows не сообщает мне об этом в своем обычном инструменте «Диспетчер задач»?
TL;DR: Windows, ты не показываешь мне все использование оперативной памяти
решение1
Это показано в RAMMap подДрайвер заблокирован. Посмотрите, что 3 ГБ используется, и это то, что вы назначили виртуальной машине.
Виртуальные машины используют эту память, поэтому никакие другие инструменты не могут ее использовать.
решение2
TL;DR: Процесс использовал память, перестал использовать память, а Windows просто пока слишком ленива, чтобы с этим разобраться.
Windows не показывает использование ОЗУ в диспетчере задач в разделе «Процесс», если только процесс не запросил ОЗУ и не имеет некоторого контроля над ее использованием. Если ОС предоставила ОЗУ процессу для резервного копирования сопоставлений, и эти сопоставления можно отменить, было бы запутанно показывать их взимаемыми с процесса. Это привело бы к сильно различающимся показателям использования для процесса, поскольку другие процессы стали бы причиной того, что эти сопоставления стали неподдерживаемыми.
Нет особой причины, по которой вас должно волновать, что Windows выделила 2 ГБ ОЗУ этому процессу, не потому что он запросил это, а просто потому что не смогла придумать ничего лучшего, как использовать эту память. И, конечно, Windows может забрать эту ОЗУ обратно в любой момент, если у нее есть что-то еще, что она делает с памятью.
Если процесс действительно использует память, она будет считаться частью его рабочего набора и будет отнесена к процессу. Если бы Windows очистила все сейчас, а процесс позже использовал память, Windows пришлось бы просто выделить ее снова. Поэтому нет смысла делать дополнительную работу сейчас, чтобы, по всей вероятности, сделать больше работы позже.