«Использование памяти» выше, чем «Размер виртуальной машины» в диспетчере задач WinXP - PullRequest
12 голосов
/ 31 октября 2008

В моем диспетчере задач Windows XP некоторые процессы отображают более высокое значение в столбце Mem Usage, чем VMSize. Например, мой экземпляр Firefox показывает 111544 K в качестве значения mem и 100576 K в качестве VMSize.

В соответствии с файлом справки диспетчера задач Mem Usage - это рабочий набор процесса, а VMSize - выделенная память в виртуальном адресном пространстве.

Мой вопрос таков: если количество зафиксированных страниц для процесса равно A, а количество страниц в физической памяти одного и того же процесса - B, не должно ли оно всегда быть B ≤ A? Разве количество страниц в физической памяти на процесс не является подмножеством зафиксированных страниц?

Или это как-то связано с разделением памяти между процессами? Пожалуйста, объясни. (Возможно, мое определение «рабочего набора» не соответствует действительности).

Спасибо.

Ответы [ 6 ]

17 голосов
/ 31 октября 2008

Виртуальная память

Предположим, что ваша программа (например, Oracle) выделяет 100 МБ памяти при запуске - размер вашей виртуальной машины увеличивается на 100 МБ, хотя никаких дополнительных физических / дисковых страниц не трогается. то есть ВМ - это не что иное, как ведение учета в памяти.

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

Частная память

Если программа копирует 10 МБ данных в эти 100 МБ, ОС обнаруживает, что процессу не было выделено ни одной страницы, соответствующей этим адресам, и назначает физические страницы объемом 10 МБ в личную память вашего процесса. (Этот процесс называется ошибкой страницы)

Рабочий набор

Определение: рабочий набор - это набор страниц памяти, которые были недавно затронуты программой.

На этом этапе эти 10 страниц добавляются к рабочему набору процесса. Если затем процесс переходит и копирует эти данные в еще один ранее выделенный кэш размером 10 МБ, все остальное остается прежним, но рабочий набор снова увеличивается на 10 МБ, если эти старые страницы отсутствуют в рабочем наборе. Но если те страницы, где уже в рабочем наборе, то все хорошо и рабочий набор программ остается прежним.

Поведение рабочего набора

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

Когда работает Набор> Виртуальная память

Теперь представьте, что та же самая программа освобождает все 100 Мб памяти. Размер виртуальной машины программ сразу уменьшается на 100 МБ (помните, что виртуальная машина = учет всех запросов на выделение памяти)

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

Это фактически сделает ВМ <рабочим набором. Однако это будет исправлено, если вы запустите другой процесс, который потребляет больше памяти, а страницы рабочего набора возвращаются ОС. </p>

3 голосов
/ 31 октября 2008

Отображение файлов

Очень распространенный способ, когда Mem Usage может превышать размер VM, - использование объектов сопоставления файлов (следовательно, это может быть связано с общей памятью, поскольку сопоставление файлов используется для совместного использования памяти). При сопоставлении файлов вы можете иметь память, которая фиксируется (либо в файле подкачки, либо в физической памяти, вы не знаете), но ей не назначен виртуальный адрес. Выделенная память отображается в Mem Usage, а использование использованных виртуальных адресов отслеживается размером виртуальной машины.

Смотри также:

Что означает «Размер виртуальной машины» в диспетчере задач Windows? в Stackoverflow

Преодоление 32-битного барьера в моем блоге для разработчиков

Обсуждение Usenet Все еще не понимает, почему рабочий набор больше виртуальной памяти

3 голосов
/ 31 октября 2008

Диспетчер задач XP просто неверен. РЕДАКТИРОВАТЬ: Если вы не верите мне (а кто-то не верит, потому что они проголосовали за это), прочитайте Использование памяти Firefox 3 . Я цитирую:

Если вы смотрите на использование памяти под Windows XP ваши номера не будет так здорово. Причина: Microsoft изменила значение «Частные байты» между XP и Vista (к лучшему).

Похоже, что MS запутался. Вы можете изменить что-то подобное, только если оно сломано.

Попробуйте Process Explorer вместо этого. Для чего диспетчер задач помечает «VM Size», Process Explorer (точнее) помечает «Private Bytes». А в Process Explorer рабочий набор (и частные байты) всегда меньше или равен виртуальному размеру, как и следовало ожидать.

1 голос
/ 31 октября 2008

Использование памяти - это объем электронной памяти, выделенной в данный момент процессу.

Размер виртуальной машины - это объем виртуальной памяти, выделенной в данный момент процессу.

так ...

  • Страница, которая существует только в электронном виде, увеличит только использование памяти.
  • Страница, которая существует только на диске, увеличит только размер виртуальной машины.
  • Страница, существующая как в памяти, так и на диске, увеличит оба значения.

Некоторые примеры для иллюстрации:

В настоящее время на моей машине iexplore использует 16 000 КБ памяти и 194 916 ВМ. Это означает, что большая часть памяти, используемая Internet Explorer, простаивает и была выгружена на диск, а в основной памяти хранится только небольшая часть.

Контраст с mcshield.exe с 98 984 КБ памяти и 98 168 КМ ВМ. Мой вывод заключается в том, что McAfee AntiVirus активен и использует много памяти. Поскольку он работает довольно долго (весь день, начиная с загрузки), я ожидаю, что большая часть виртуального диска размером 98 168 КБ является копиями электронной памяти - хотя в диспетчере задач нет ничего, чтобы это подтвердить.

0 голосов
/ 06 марта 2010

Фрагментация памяти, вероятно, является причиной: Если процесс выделяет 1 октет, он считается за 1 октет в VMSize, но этот 1 октет требует физической страницы (4 КБ в операционной системе Windows). Если после выделения / освобождения памяти у процесса есть второй октет, который отделен более чем на 4 КБ от первого, этот второй октет всегда будет храниться на отдельной физической странице, чем 1. Таким образом, размер виртуальной машины составляет 2 октета, а использование памяти - 2 страницы == 8K

Таким образом, тот факт, что MemUsage больше, чем VMSize, показывает, что процесс выполняет много операций выделения и освобождения и фрагментирует память. Это может быть потому, что процесс запущен очень давно. Или еще есть место для оптимизации; -)

0 голосов
/ 31 октября 2008

Вы можете найти объяснение в The Game Shell Game

Рабочий набор (A) - это набор страниц виртуальной памяти (зафиксированных) для процесса, которые находятся в физической памяти. Эти страницы полностью принадлежат процессу. Рабочий набор подобен списку «в настоящее время / недавно работающему на этих страницах».

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

Зафиксированная память - Когда приложение касается страницы виртуальной памяти (чтение / запись / программная фиксация), страница становится зафиксированной страницей. Теперь он поддерживается страницей физической памяти. Обычно это физическая страница ОЗУ, но в конечном итоге это может быть страница в файле подкачки на жестком диске или страница в файле отображения памяти на жестком диске. Менеджер памяти обрабатывает переводы со страницы виртуальной памяти на физическую страницу. Виртуальная страница может находиться в физической памяти, а страница рядом с ней может находиться на жестком диске в файле подкачки.

НО: PF (Page File) Usage - это общее количество зафиксированных страниц в системе. Он не говорит вам, сколько фактически записано в файл подкачки. Он только сообщает вам, какой объем файла подкачки будет использован, если все зафиксированные страницы должны быть записаны в файл подкачки одновременно.

Следовательно, B> A ...

Если мы согласны с тем, что B представляет собой «использование памяти» или также использование PF, проблема заключается в том, что он фактически представляет потенциал использование страницы : в Xp, это потенциальное файловое пространство может использоваться как место для назначения страниц виртуальной памяти, которые запрашивались программами, но никогда не использовались ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...