Анализ использования памяти с помощью Монитора ресурсов 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 для наблюдения за распределением памяти? Поделитесь своим мнением в комментариях!
Автор: Greg Shultz
Перевод SVET
Оцените статью: Голосов
Не доверяйте информации о памяти в Диспетчере задач
За много лет использования Windows я привык к Диспетчеру задач. Оттуда я убил сотни приложений за плохое поведение. Там же смотрел, кто из них пожирает ресурсы. Пока я не начал работать с машинами, у которых сотни гигабайт памяти, а у приложений соответствующие запросы. В этой статье обсудим, почему Диспетчер задач плохо отслеживает память и что использовать взамен. Во-первых, о механизме выделения памяти в Windows.
tl;dr: Диспетчер задач скрывает информацию о подкачке (paged memory) и виртуальном пространстве процесса. Лучше используйте Process Explorer из комплекта Sysinternals.
Выделение памяти в Windows
При запуске нового процесса ОС присваивает этому процессу непрерывное адресное пространство. В 32-разрядных системах это пространство может составить 4 ГБ, обычно 2 ГБ для ядра, а остальное для процесса. В этой статье проигнорируем использование памяти ядром. В 64-разрядных системах зарезервированная процессом память может вырасти до колоссальных 64 ТБ. Что этот процесс будет делать с несколькими терабайтами памяти, когда у нас на самом деле жалкие 8 ГБ? Сначала нужно понять, что такое зарезервированная и переданная память.
Зарезервированная и переданная память
Не все части этого огромного адресного пространства равны. Некоторые части адресного пространства процесса фактически поддерживаются либо физической оперативной памятью, либо диском (см. ниже). Зарезервированная память считается переданной (Committed), если ОС предлагает вам эту память при попытке её использовать. Остальная часть адресного пространства, а это подавляющее большинство, остаётся доступным для резервирования. То есть не всегда ОС может предложить вам этот блок памяти для использования: она может сделать копию на диске (файл подкачки), например, а может и не сделать. В C++ резервирование памяти осуществляется вызовом VirtualAlloc. Так что переданная память является аппаратно ограниченным ресурсом в ОС. Давайте посмотрим.
Файл подкачки ОС
Файл подкачки — замечательная идея. В принципе, ОС понимает, что некоторые части памяти особо не используются вашим приложением. Зачем тратить на него реальную физическую память? Вместо этого процесс в ядре записывает этот неиспользуемый фрагмент на диск. Пока к нему не обратятся снова, только тогда он вернётся в память.
Для более подробного объяснения, как работает память в Windows, рекомендую лекцию «Тайны управления памятью» Марка Руссиновича.
Отслеживание памяти
Здесь много за чем нужно следить и анализировать. К кому обратиться? Конечно, к Диспетчеру задач!
Память в RAM обычно называют рабочим набором (Working Set), в то время как всю выделенную память обычно именуют Private Bytes. Библиотеки DLL вносят путаницу в определения, поэтому пока их проигнорируем. Иначе говоря:
Private Bytes [выделенная память] = рабочий набор + файл подкачки
По умолчанию Диспетчер задач показывает для любого процесса именно рабочий набор:

И это число, на которое я всё время смотрел. Откуда я знал, что в Диспетчере задач информация о переданной памяти находится в колонке Commit Size . Я так и не смог там найти информацию о виртуальной памяти.
Диспетчер задач позволяет добавить информацию о переданной памяти, если щёлкнуть правой кнопкой мыши по столбцам и выбрать соответствующий пункт
Эффективные метрики памяти
К счастью, есть много других ресурсов для отслеживания ресурсов. На каждой машине под Windows установлен PerfMon (Системный монитор), который выдаёт очень подробную информацию о каждом процессе и системе в целом:

Интересно, что Системный монитор умеет фактически исследовать и сравнивать метрики на двух или более компьютерах в сети. Это очень мощный инструмент, но Диспетчер задач, очевидно, удобнее для пользователей. В качестве промежуточного решения рекомендую Process Explorer:

Бум! Visual Studio, чего это ты до сих пор в 32-битном режиме (обратите внимание на его Virtual Size)? Пиковое использование памяти на моём компьютере на уровне 89% от максимума, ещё терпимо. Это пригодится позже.
Дополнение: многие указали на другие удобные инструменты, в том числе VMMap и RAMMap.
Отладка по информации о памяти
К счастью, это не какие-то ненужные мелочи ОС. Актуальная информация о потреблении памяти многократно помогала мне в отладке разных проблем.
Самое главное, это найти нетронутые части выделенной памяти. Данные о подкачке тоже важны: эта память передана, но используется редко или вообще не используется.
Даже если память будет иногда использоваться, важно понимать, что это дорогой ресурс, так что идти по такому пути ни в коем случае нельзя. Здесь появятся и утечки памяти.
По этим причинам я ранее слышал предложение полностью удалить файл подкачки и приравнять выделенную память рабочему набору. Однако это обоюдоострая идея. Тогда ОС не в состоянии сбросить память в случае неправильной работы приложений, которые иногда впустую резервируют память.
Администрирование процессов в диспетчере задач
Во вкладке Процессы (Processes) окна диспетчера задач отображается детальная информация обо всех процессах, выполняемых и данный момент, включая процессы операционной системы, локальные службы, процессы как интерактивного пользователя (зарегистрировавшегося с локальной консоли), так и удаленных пользователей. Чтобы скрыть процессы удаленных пользователей, сбросьте флажок Отображать процессы всех пользователей (Show Processes From All Users).
Поля на вкладке Процессы (Processes) содержат много информации о выполняющихся процессах. При помощи этой информации вы определите, какие процессы чрезмерно загружают системные ресурсы, например, процессорное время и память.
По умолчанию отображаются следующие поля:
• Имя образа (Image Name) Имя процесса или исполняемого файла, запустившего процесс.
• Пользователь (User Name) Имя пользователя или системной службы, запустившей процесс.
• ЦП (CPU) Доля ресурсов процессора, занятая данным процессом (в процентах).
• Память (частный рабочий набор) (Memory (Private Working Set)) Объем памяти, используемой процессом в данный момент.
• Описание (Description) Описание процесса.
Выберите в меню Вид (View) команду Выбрать столбцы (Select Columns), чтобы добавить столбцы на вкладку Процессы (Processes).
Когда в системе возникли проблемы, полезными могут оказаться следующие столбцы:
• Базовый приоритет (Base Priority) Базовый приоритет определяет, сколько системных ресурсов выделяется процессу. Чтобы задать приоритет процесса, щелкните процесс правой кнопкой мыши, выберите команду Приоритет (Set Priority) и выберите один из следующих вариантов: Низкий (Low), Ниже среднего (Below Normal), Средний (Normal), Выше среднего (Above Normal), Высокий (High) и Реального времени (Real-Time). Большинство процессов по умолчанию имеет средний приоритет. Наивысший приоритет назначается процессам реального времени.
• Время ЦП (CPU Time) Общее количество циклов процессора, использованное процессом с момента запуска. Чтобы быстро выявить процессы, которые в наибольшей мере загружают процессор, выведите этот столбец и щелкните его заголовок, чтобы отсортировать записи о процессах по времени ЦП.
• Дескрипторы (Handle Count) Общее количество дескрипторов файлов, обрабатываемых процессом. Счетчик дескрипторов позволяет оценить, насколько процесс зависит от файловой системы. С некоторыми процессами, например, с процессами Microsoft Internet Information Services (IIS), связаны тысячи открытых дескрипторов файлов. Для обслуживания каждого дескриптора требуется системная память.
• Число чтений (I/O Reads), Число записей (I/O Writes) Общее число дисковых операций чтения или записи с момента запуска процесса. Оба этих параметра говорят о том, сколько дисковых операций произведено процессом. Если число чтений и записей растет непропорционально действительной нагрузке на сервер, возможно, процесс не кеширует файлы или кеширование настроено неправильно. В идеале кеширование должно снижать потребность в операциях чтения и записи.
• Ошибки страниц (Page Faults) Ошибка страницы происходит, когда процесс запрашивает страницу в памяти, а система не может найти ее в запрошенном месте. Если запрошенная страница находится в другой области памяти, ошибка называется программной (soft page fault). Если запрошенная страница отсутствует на диске, ошибка называется аппаратной (hard page fault). Большинство процессоров способны обработать большое число программных ошибок. Дисковые ошибки могут привести к значительным задержкам.
• Память — выгружаемый пул (Paged Pool), Память — невыгружаемый пул (Nonpaged Pool) Выгружаемый пул — область системной памяти для объектов, которые можно записать на диск, если они не используются. Невыгружаемый пул — область системной памяти для объектов, которые нельзя записывать на диск. Следует обратить внимание на процессы, которым требуется большой объем невыгружаемой памяти. Если на сервере недостаточно свободной памяти, эти процессы могут стать причиной большого числа ошибок страниц.
• Память — пик рабочего набора (Peak Memory Usage) Максимальный объем памяти, использованный процессом. Важно также следить за разницей между текущим и пиковым использованием памяти. Приложениям с большой разницей между типичным и максимальным объемом занимаемой памяти, например, Microsoft SQL Server, необходимо выделить при запуске больше памяти, чтобы они работали эффективнее.
• Счетчик потоков (Thread Count) Текущее количество потоков, используемых процессом. Большинство серверных приложений — многопоточные. Многопотоковость обеспечивает одновременное выполнение запросов процесса. Некоторые приложения способны динамически управлять числом потоков для повышения своей производительности. С другой стороны, чрезмерное количество потоков может привести к снижению производительности, поскольку операционной системе приходится слишком часто переключаться между контекстами потоков.
В списке выполняющихся процессов вы увидите процесс Бездействие системы (System Idle Process). Задать приоритет этого процесса нельзя. В отличие от других процессов, использующих системные ресурсы, процесс Бездействие системы (System Idle Process) отслеживает незанятые системные ресурсы. Число 99 в столбце ЦП (CPU) для процесса Бездействие системы (System Idle Process) означает, что 99% процентов ресурсов процессора в данный момент не используется.
Просматривая процессы помните, что одно приложение может породить несколько процессов. Обычно они зависимы от главного процесса, начиная с которого формируется дерево зависимых процессов. Чтобы найти главный процесс приложения, щелкните правой кнопкой приложение на вкладке Приложения (Applications) и выберите команду Перейти к процессу (Go То Process). Если вы хотите завершить процесс, обычно следует указывать главный процесс приложения, а не зависимые процессы. Это гарантирует полную остановку приложения.
Есть несколько способов остановить главный процесс приложения и все зависимые процессы:
• выделить приложение на вкладке Приложения (Applications) и щелкнуть кнопку Снять задачу (End Task);
• щелкнуть правой кнопкой главный процесс приложения на вкладке Процессы (Processes) и выбрать команду Завершить процесс (End Process) или щелкнуть одноименную кнопку;
• щелкнуть правой кнопкой главный или зависимый процесс на вкладке Процессы (Processes) и выбрать команду Завершить дерево процессов (End Process Tree).
Как интерпретировать Диспетчер задач Windows?
Я запускаю Windows 7 RC1, который использует тот же WTM из Vista. Когда я смотрю на процессы, есть некоторые столбцы, я не уверен, в чем разница:
- память — рабочий набор
- память — частный рабочий набор
- Memory-commit size
может кто-нибудь сказать мне, что они есть?
5 ответов:
- рабочий набор: Это включает в себя все общие мелки, так что в общей сложности будет 14.
- частный рабочий набор: Это включает в себя только мелки, которыми владеет каждый ребенок, и не отражает, сколько на самом деле было использовано в каждой картине. Всего поэтому 10.
рабочий набор:
рабочий набор-это подмножество виртуальных страниц, которые обитают только в физической памяти; это будет частичное количество страниц от этого процесса.
частный рабочий набор — это объем памяти, используемый процессом, который не может быть разделен между другими процессами
и в microsoft.com Вы можете найти более подробную информацию о других типах памяти.
‘рабочий набор’ — это объем памяти, который процесс в настоящее время имеет в физической оперативной памяти. Другими словами, доступ к любым страницам в «рабочем наборе» не приведет к ошибке страницы, так как страница находится в оперативной памяти.
Что касается двух других, я не уверен на 100%, вероятно, «рабочий набор» содержит общую память, такую как файлы с отображением памяти, а «частный рабочий набор» содержит только страницы, которые процесс может использовать и не может совместно использовать.
в этой сайт и поиск спикера ‘Дэйв Соломон’. Существует отличная веб-трансляция, которую он дал, которая объясняет о памяти Windows, и он упоминает рабочий набор, размеры фиксации и другие термины памяти.
EDIT:
эти ссылки на сайт действительно мертвы : (
вместо этого, вы можете искать Google для
Vimeo david solomon windows
те же самые видео выглядят доступными на Vimeo сейчас, что круто.
Если вы открываете Монитор ресурсов из WTM, наведение указателя мыши на различные заголовки столбцов интересного процесса отображает довольно информативную подсказку.
например, Commit (KB): объем виртуальной памяти, зарезервированной операционной системой для процесса в КБ.
etc.