Рабочий набор
Рабочий набор процесса — это набор страниц в виртуальном адресном пространстве процесса, которые в настоящее время находятся в физической памяти. Рабочий набор содержит только страничные выделения памяти; В рабочий набор не включаются ресурсы памяти, не допускающие перекачки, такие как расширения адресных окон (AWE) или большие страницы .
Если процесс ссылается на страницу памяти, которая в настоящее время не входит в рабочий набор, происходит ошибка страницы . Обработчик ошибки системной страницы пытается устранить ошибку страницы, и в случае успеха страница добавляется в рабочий набор. (Доступ к AWE или выделению больших страниц никогда не приводит к ошибке страницы, так как эти выделения не являются страничными.)
Ошибка жесткой страницы должна быть устранена путем чтения содержимого страницы из резервного хранилища страницы, которое является системным файлом подкачки или файлом, сопоставленным в памяти, созданным процессом. Ошибка мягкой страницы может быть устранена без доступа к резервному хранилищу. Ошибка мягкой страницы возникает в следующих случаях:
- Страница находится в рабочем наборе какого-то другого процесса, поэтому она уже находится в памяти.
- Страница находится в состоянии перехода, так как она либо была удалена из рабочих наборов всех процессов, которые использовали страницу и еще не была перепрофилирована, либо она уже находится в результате операции предварительной выборки диспетчера памяти.
- Процесс впервые ссылается на выделенную виртуальную страницу (иногда это называется ошибкой с нулевым спросом).
Страницы можно удалить из рабочего набора процесса в результате следующих действий:
- Процесс уменьшает или очищает рабочий набор, вызывая функцию SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx или EmptyWorkingSet .
- Процесс вызывает функцию VirtualUnlock в не заблокированном диапазоне памяти.
- Процесс отменяет сопоставление сопоставленного представления файла с помощью функции UnmapViewOfFile .
- Диспетчер памяти обрезает страницы из рабочего набора, чтобы создать больше доступной памяти.
- Диспетчер памяти должен удалить страницу из рабочего набора, чтобы освободить место для новой страницы (например, потому, что рабочий набор имеет максимальный размер).
Если несколько процессов совместно используют страницу, удаление страницы из рабочего набора одного процесса не влияет на другие процессы. После удаления страницы из рабочих наборов всех процессов, которые ее использовали, страница становится страницей перехода. Страницы перехода остаются кэшируемыми в ОЗУ, пока на страницу не будет повторно ссылаться какой-либо процесс или не будет перепрофилирована (например, заполнены нулями и передана другому процессу). Если страница перехода была изменена с момента последней записи на диск (т. е. если страница имеет значение «грязное»), то перед перепрофилированием страницу необходимо записать в ее резервное хранилище. Система может начать писать грязное переходных страниц в их резервное хранилище, как только такие страницы станут доступными.
Каждый процесс имеет минимальный и максимальный размер рабочего набора, который влияет на поведение процесса подкачки виртуальной памяти. Чтобы получить текущий размер рабочего набора указанного процесса, используйте функцию GetProcessMemoryInfo . Чтобы получить или изменить минимальный и максимальный размер рабочего набора, используйте функции GetProcessWorkingSetSizeEx и SetProcessWorkingSetSizeEx .
Интерфейс PSAPI для состояния процесса предоставляет ряд функций, возвращающих подробные сведения о рабочем наборе процесса. Дополнительные сведения см. в разделе Сведения о рабочем наборе.
Sysadminium
Изучая память процессов в системе Windows вы обязательно столкнётесь с таким понятием как рабочий набор процесса. В этой статье разберём что это такое.
Оглавление скрыть
Рабочий набор
Рабочий набор — это виртуальные страницы памяти в которых процесс хранит необходимые ему данные.
Если объем свободной памяти компьютера превышает пороговое значение, страницы остаются в рабочем наборе даже если они не используются.
А если свободная память (free) окажется ниже порогового значения, то страницы изымаются из рабочих наборов. Такие страницы могут быть помещены с кэш. То есть они все равно останутся в оперативной памяти. При обращении к таким страницам, процесс получит ошибку page fault и страница вернется из кэша.
Если возрастет нагрузка на оперативную память, то данные могут быть выгружены в файл подкачки. При этом возврат данных из подкачки займет большее времени чем возврат страниц из кэша.
Наблюдение за рабочим набором процесса
Наблюдать за рабочим набором процесса будем с помощью «Системного монитора«.
- Находим оснастку «Системный монитор«:
- Удаляем счетчик производительности, который был по умолчанию:

- И добавляем новый счетчик производительности:
- Находим группу счетчиков «Процесс«, в ней находим процесс (я посмотрю за процессом Chrome).
- Выбираем счетчики: «Ошибок страниц/с«, «Рабочий набор» и его пик.
- Нажимаем кнопку «Добавить» и «OK«

- Переключаем внешний вид на «Отчет».

- Смотрим данные:
- Рабочий набор — это объем страниц в памяти для данного процесса в байтах.
- Рабочий набор (пик) — это максимальный объем страниц, который был в памяти для данного процесса за все время работы процесса.
- Ошибок страницы/с — это частота ошибок, когда поток не находит нужную страницу в памяти и её необходимо подгружать.

Сумма рабочих процессов не равна используемой памяти
Суммарный объем всех рабочих наборов процессов не равен всей используемой оперативной памяти. Если помните, в системе присутствует общая память. Страницы от туда могут быть замаплены к разным процессам. Про это было написано тут. А каждый процесс думает что эта страница относится к его рабочему набору. Другими словами, одна общая страница будет считаться несколько раз для каждого процесса.
Что расходует оперативную память — как узнать?

Хотя объем оперативной памяти не является определяющим в производительности системы во всех случаях, как это может показаться на первый взгляд, его значение трудно переоценить. Недостаток ОЗУ может вызвать замедлении работы программ, а в некоторых случаях и их принудительное завершение. В таких случаях бывает полезно знать, на что именно тратятся драгоценные ресурсы памяти, поскольку на основе полученных данных можно будет принимать решение об оптимизации системы. Определить, какие процессы расходуют ОЗУ не представляет большой сложности, сделать это можно как средствами самой Windows, так и средствами сторонних утилит.
↑ Как узнать, что расходует оперативную память
↑ Диспетчер задач
Получить общие представления о распределении оперативной памяти можно с помощью Диспетчера задач. Здесь на вкладке «Процессы» в колонке «Память» можно видеть, сколько памяти в килобайтах такие-то процессы используют в данный момент времени. Аналогичные сведения в столбце «Память (Частный рабочий набор)» отображаются на вкладке «Подробно». При необходимости вы можете отсортировать процессы по объему потребляемых ими ресурсов, кликнув по заголовку столбца. Как видно из приложенного ниже скриншота, главным потребителем ОЗУ в нашем примере является процесс браузера Google Chrome.
Примечание: выбрав в контекстном меню процесса опцию «Перейти к службам», можно увидеть службы, в этот процесс загруженные.


Общие сведения о распределении памяти доступны на вкладке «Производительность» в подразделе «Память». Особенный интерес представляет собой блок данных структуры памяти, его значения стоят того, чтобы рассмотреть их чуть более подробно. • Используется —RAM, используемая в настоящее время. • Доступно — объем памяти, доступной для использования Windows, драйверами, процессами и драйверами. • Выделено значение, представленное двумя числами — суммой оперативной памяти и памяти файла подкачки. • Кэшировано — объем памяти, выделяемый под хранение данных, которые могут понадобиться в будущем. На графике «Структура памяти» кэшированная память обозначается как «Зарезервировано». • Выгружаемый и не выгружаемый пулы — ресурсы RAM, используемые исключительно ядром Windows. выгружаемый пул отличается от невыгружаемого тем, что первый может быть записан в файл подкачки.
↑ Монитор ресурсов

Немногим больше сведений об использовании памяти конкретными процессами может дать оснастка «Монитор ресурсов», открыть которую можно из вкладки «Производительность» Диспетчера задач или командой resmon в окошке «Выполнить». Помимо цветного графика распределения памяти, в целом дублирующего блок структуры памяти в Диспетчере задач, Монитор ресурсов на вкладке «Память» отображает список запущенных процессов с изменяющимися в режиме реального времени значениями. Рассмотрим вкратце относящиеся к расходу ОЗУ. • Завершено — в колонке отображается максимальный объем файла подкачки, который был использован процессом за все время открытой им сессии. • Рабочий набор — объем ОЗУ, используемый процессом в настоящий момент времени. В этот объем включается также зарезервированная память. • Общий набор — это объем памяти, который может быть забран у текущего процесса для некоего другого процесса, если последний в порядке приоритета станет нуждаться в ресурсах. • Частный набор — это используемая процессом память, которая не может быть высвобождена и передана другим процессам.
↑ RAMMap
Если вы хотите анализировать распределение оперативной памяти на профессиональном уровне, вам понадобиться что-то более функциональное, чем Монитор ресурсов и Диспетчер задач. Например, утилита RAMMap, разработанную сотрудниками Microsoft Марком Руссиновичем и Брайсом Когсвеллом. Описать все ее возможности в рамках одной статьи средней длины не представляется возможным, впрочем, рядовому пользователю вполне будет достаточно знать лишь о некоторых аспектах работы с этим инструментом.
Наибольший интерес в RAMMap представляют вкладки «Use Counts», «Processes» и «File Details». Первая содержит цветной график, в котором каждый цвет соответствует определенному типу памяти. Рассмотрим некоторые наиболее интересные значения. • Process Private — память, отведенная под исключительно отдельные процессы. • Mapped File — область памяти системного файлового кэша. • Shareble — используемая процессами память, которая может быть освобождена для других процессов. • Paged Pool и Nonpaged Pool — ОЗУ, отведенная исключительно под процессы ядра. Первый ее тип может быть записан в дисковый кэш, второй не может. • Session Private — часть памяти, используемая некоторыми системными драйверами. • Metafile — память, отведенная под ту часть системного кэша, который хранит метаданные NTFS и MFT. • Unused — свободная, неиспользуемая в данный момент RAM. • Total — общий размер ОЗУ, доступный для использования в вашей системе.
Если содержимое вкладки «Use Counts» дает общее представление о типах используемых страниц памяти и отведенном под них объема ресурсов, то на вкладке «Processes» можно посмотреть, сколько памяти отводится под каждый конкретный процесс.
Наконец, вкладка «File Details» отображает список файлов, отнесенных системой в память. Это могут быть не только исполняемые файлы, но и всякие другие файлы, используемые программами и операционной системой. Столбец «Size» на вкладке показывает не объем ОЗУ, а физический размер файла на жестком диске.
В отличие от Диспетчера задач и Монитора ресурсов, RAMMap не позволяет управлять процессами, она служит для получения подробных сведений о распределении ресурсов памяти, впрочем, кое-что утилита всё же умеет. Так, если вы перейдете в меню «Empty», то найдете в нём несколько опций очистки страниц оперативной памяти, зарезервированной, но неиспользуемой в данный момент запущенными процессами.
Анализ использования памяти с помощью Монитора ресурсов Windows 7
Прежде чем приступать к анализу, коротко расскажу о том, как Microsoft Windows 7 управляет памятью. После этого вам будет проще понять, какая информация представлена в Мониторе ресурсов Windows 7.
Диспетчер памяти Windows 7 создает виртуальную систему памяти, которая состоит из доступной физической RAM и файла подкачки на жестком диске. Это позволяет операционной системе выделять блоки памяти фиксированной длины (страницы) с последовательными адресами в физической и виртуальной памяти.
Запуск Монитора ресурсов Windows 7
Чтобы запустить Монитор ресурсов Windows 7, откройте меню «Пуск» (Start), введите в строке поиска «Resmon.exe» и нажмите [Enter]. В открывшемся окне выберите вкладку «Память» (Memory, рис. A).

Рисунок A. На вкладке «Память» в Мониторе ресурсов Windows 7 приводятся подробные сведения о распределении памяти.
Таблица «Процессы»
На вкладке «Память» есть таблица «Процессы» (Processes, рис. B), в которой перечислены все запущенные процессы, а сведения об используемой памяти разбиты на несколько категорий.

Рисунок B. Сведения об используемой памяти для каждого процесса разбиты на несколько категорий.
Графа «Образ»
В колонке «Образ» (Image) указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко — например, процесс «notepad.exe» со всей очевидностью принадлежит Блокноту (Notepad). Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.
Графа «ИД процесса»
В колонке «ИД процесса» (PID) указывается номер процесса — уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.
Графа «Завершено»
В столбце «Завершено» (Commit) указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.
Графа «Рабочий набор»
В графе «Рабочий набор» (Working Set) указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.
Графа «Общий»
В колонке «Общий» (Shareable) указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL — Ntdll, Kernel32, Gdi32 и User32 — используют общую память.
Графа «Частный»
В столбце «Частный» (Private) указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.
Графа «Ошибок отсутствия страницы в памяти/сек.»
В графе «Ошибок отсутствия страницы в памяти/сек.» (Hard Faults/sec) указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск — в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.
О чем говорят ошибки отсутствия страницы в памяти
Теперь, когда вы представляете, какие сведения собраны в таблице «Процессы», давайте посмотрим, как с их помощью следить за распределением памяти. При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.
В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Вам наверняка доводилось наблюдать неожиданное замедление работы всех приложений, которое затем также неожиданно прекращалось. Почти наверняка это замедление было связано с активным перераспределением данных между физической памятью и подкачкой.
Отсюда следует вывод: если ошибки отсутствия страницы в памяти для того или иного процесса происходят слишком часто и притом регулярно, компьютеру не хватает физической памяти.
Чтобы было удобнее наблюдать за процессами, вызывающими частые ошибки отсутствия страницы в памяти, можно отметить их флажками. При этом выбранные процессы переместятся наверх списка, а в графике ошибок отсутствия страницы в памяти будут представлены оранжевой кривой.
Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти — не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.
Таблица «Физическая память»
В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» (Physical Memory) дает общую картину использования RAM. Ее ключевой компонент — уникальная гистограмма, показанная на рис. C.

Рисунок C. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7.
Каждая секция гистограммы обозначена собственным цветом и представляет определенную группу страниц памяти. По мере использования системы, диспетчер памяти в фоновом режиме перемещает данные между этими группами, поддерживая тонкий баланс между физической и виртуальной памятью для обеспечения эффективной работы всех приложений. Давайте рассмотрим гистограмму поподробнее.
Секция «Зарезервированное оборудование»
Слева расположена секция «Зарезервированное оборудование» (Hardware Reserved), обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти.
Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт. К компонентам, влияющим на объем зарезервированной памяти, относятся:
• BIOS;
• компоненты материнской платы — например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);
• звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;
• шина PCI Express (PCIe);
• видеокарты;
• различные наборы микросхем;
• флеш-накопители.
Некоторые пользователи жалуются, что в их системах для оборудования зарезервировано ненормально много памяти. Мне с такой ситуацией сталкиваться не приходилось и потому я не могу ручаться за действенность предложенного решения, но многие отмечают, что обновление версии BIOS позволяет решить проблему.
Секция «Используется»
Секция «Используется» (In Use, рис C), обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего» (Total) за вычетом суммы показателей «Изменено» (Modified), «Ожидание» (Standby) и «Свободно» (Free). В свою очередь, значение «Всего» — это показатель «Установлено» (Installed RAM) за вычетом показателя «Зарезервированное оборудование».
Секция «Изменено»
Оранжевым цветом выделена секция «Изменено» (Modified), в которой представлена измененная, но не задействованная память. Фактически она не используется, но может быть в любой момент задействована, если снова понадобится. Если память не используется достаточно давно, данные переносятся в файл подкачки, а память переходит в категорию «Ожидание».
Секция «Ожидание»
Секция «Ожидание», обозначенная синим цветом, представляет страницы памяти, удаленные из рабочих наборов, но по-прежнему с ними связанные. Другими словами, категория «Ожидание» — это фактически кэш. Страницам памяти в этой категории присваивается приоритет от 0 до 7 (максимум). Страницы, связанные с высокоприоритетными процессами, получают максимальный приоритет. Например, совместно используемые процессы обладают высоким приоритетом, поэтому связанным с ними страницам присваивается наивысший приоритет в категории «Ожидание».
Если процессу требуются данные с ожидающей страницы, диспетчер памяти сразу же возвращает эту страницу в рабочий набор. Тем не менее, все страницы в категории «Ожидание» доступны для записи данных от других процессов. Когда процессу требуется дополнительная память, а свободной памяти недостаточно, диспетчер памяти выбирает ожидающую страницу с наименьшим приоритетом, инициализирует ее и выделяет запросившему процессу.
Секция «Свободно»
В категории «Свободно», обозначенной голубым цветом, представлены страницы памяти, еще не выделенные ни одному процессу или освободившиеся после завершения процесса. В этой секции отображается как еще не задействованная, так и уже освобожденная память, но на самом деле, еще не задействованная память относится к другой категории — «Нулевые страницы» (Zero Page), которая так называется, потому что эти страницы инициализированы нулевым значением и готовы для использования.
О проблеме свободной памяти
Теперь, когда вы в общих чертах представляете, как работает диспетчер памяти, ненадолго остановимся на распространенном заблуждении, связанном с системой управления памятью в Windows 7. Как видно из рис. C, секция свободной памяти — одна из самых маленьких в гистограмме. Тем не менее, ошибочно на этом основании полагать, будто Windows 7 потребляет чересчур много памяти и что система не может нормально работать, если свободной памяти так мало.
На самом деле, все совсем наоборот. В контексте принятого в Windows 7 подхода к управлению памятью, свободная память бесполезна. Чем больше памяти задействовано, тем лучше. Заполняя память до максимума и постоянно перемещая страницы из одной категории в другую с использованием системы приоритетов, Windows 7 повышает эффективность работы и предотвращает попадание данных в файл подкачки, не давая ошибкам отсутствия страницы в памяти замедлить быстродействие.
Мониторинг памяти
Хотите понаблюдать систему управления памятью Windows 7 в действии? Перезагрузите компьютер и сразу же после запуска откройте Монитор ресурсов Windows 7. Перейдите на вкладку «Память» и обратите внимание на соотношение секций в гистограмме физической памяти.
Затем начните запускать приложения. По мере запуска следите за изменением гистограммы. Запустив как можно больше приложений, начните закрывать их по одному и наблюдайте, как изменяется соотношение секций в гистограмме физической памяти.
Проделав этот экстремальный эксперимент, вы поймете, как Windows 7 управляет памятью на вашем конкретном компьютере, и сможете использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти в нормальных условиях повседневной работы.
А что думаете вы?
Нравится ли вам идея использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти? Поделитесь своим мнением в комментариях!
Оцените статью: Голосов
Copyright © 2006-2022 Winblog.ru All rights reserved.
Права на статьи принадлежат их авторам. Копирование и использование материалов разрешается только в случае указания явной гиперссылки на веб-сайт winblog.ru, как на источник получения информации.
Сайт для посетителей возрастом 18+
