Поделиться через


Упражнение 1. Определение процессов с большими рабочими наборами

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

Данные, называемые постоянным набором, — это набор страниц, которые в настоящее время находятся в физической памяти (ОЗУ). Постоянный набор — это snapshot текущего состояния памяти в конце трассировки с помощью средства записи производительности Windows (WPR) или оценки памяти набора средств оценки. Невозможно собрать несколько моментальных снимков в одной трассировке.

Резидентные наборы обеспечивают целостное и мгновенное snapshot композиции памяти в системе. Анализ постоянного набора обычно проводится по следующим причинам:

  • Чтобы понять использование физической памяти, особенно если использование физической памяти выше, чем ожидалось.

  • Сведения об источниках частного рабочего набора процессов, особенно если частный рабочий набор процесса больше, чем ожидалось.

  • Проблемы с реагированием системы из-за активности разбиения по страницам.

Шаг 1. Сбор данных с помощью набора средств оценки

Набор средств оценки Windows содержит тест для измерения объема памяти после загрузки. Результаты оценки объема памяти можно использовать для сбора базовых показателей предварительной загрузки программного обеспечения для изображений. Многие процессы и службы всегда используются и занимают память. Эта оценка помогает увидеть, как драйверы и приложения (которые всегда выполняются) влияют на процесс загрузки.

  1. Откройте консоль оценки Windows (WAC) в меню Пуск .

  2. Откройте меню Параметры и выберите Создать задание...

    1. Введите MemoryTest в качестве имени задания.

    2. Выберите Создать настраиваемое задание.

  3. Щелкните Добавить оценки.

    • Добавьте оценку объема памяти , щелкнув символ "+"
  4. Щелкните добавленную оценку объема памяти , чтобы ввести конфигурацию теста.

  5. Снимите флажок Использовать рекомендуемые параметры и выберите Быстрый запуск для конфигурации.

    • Быстрый запуск позволяет выполнить тест за более короткое время за счет точности данных.

    Снимок экрана консоли оценки Windows.

  6. Если выбран параметр Быстрый запуск , у вас есть два варианта:

    1. Упакуйте задание, чтобы создать папку, которая содержит все тестовые ресурсы, и скопировать ее в другую тестовую систему. (Нажмите кнопку Упаковать... в правом нижнем углу, чтобы выбрать этот параметр.)

    2. Запустите задание непосредственно в системе. (Нажмите кнопку Выполнить в правом нижнем углу, чтобы выбрать этот параметр.)

      • Это перезапускает систему для сбора трассировки.

      • Этот тест может занять около 15–20 минут.

    Нам нужен параметр Выполнить .

Шаг 2. Визуализация результатов оценки объема памяти с помощью WAC

После завершения оценки можно открыть XML-файл результатов, содержащий сводку по использованию памяти в системе.

Шаг 2.1. Открытие отчета о памяти

  1. В WAC откройте меню Параметры и выберите Открыть результаты...

    • Можно также нажать клавиши CTRL+R на клавиатуре.
  2. Нажмите кнопку Обзор... .

  3. Перейдите в папку, в которой вы сохранили оценку, созданную на шаге 1.

  4. Откройте оценку, созданную на шаге 1.

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

    Отчет должен выглядеть примерно так.

    Пример отчета из консоли оценки Windows, показывающий использование памяти.

  5. Найдите время, чтобы ознакомиться с отчетом, просмотрев категории "Приватные страницыдрайверов и процессов".

В предыдущем примере из 4 ГБ физической ОЗУ используется 1487 МБ памяти.

  • Используемая память = рабочие наборы процессов + память без страниц + измененные страницы

  • Доступная память = резервная память + свободная память

В предыдущем примере основными потребителями использования памяти являются выделения драйверов с 267 МБ для нестраничных страниц и 613 МБ для частных страниц процесса (частные рабочие наборы).

Дополнительные сведения о метриках см. в разделе Результаты оценки объема памяти на сайте MSDN.

Шаг 2.2. Проверка распределения драйверов без страниц

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

  1. Разверните категорию Нестраничные выделения драйверов , щелкнув стрелку слева.

  2. Разверните категорию DriverLockedSystemPages .

    • Это память, загруженная из выгружаемой памяти, а затем заблокированная драйвером, пока она больше не будет полезна.
  3. Определите драйвер с наибольшим потреблением памяти.

    Пример отчета из консоли оценки Windows, в котором показано использование нестраничного распределения драйверов.

Вы можете повлиять на эту метрику, заменив аппаратные или программные драйверы с более низкими требованиями к памяти.

Поставщик драйвера оказывает наибольшее влияние на эту метрику по способу его использования. Найдите выделение больших объемов памяти в результатах, представленных в WAC. Кроме того, поставщикам драйверов можно предоставить трассировки производительности (хранящиеся в том же каталоге, что и результаты оценки, и их можно проанализировать с помощью WPA) этой оценки, чтобы найти области с большим объемом памяти, которые являются кандидатами для исследования сокращения использования памяти.

Шаг 2.3. Проверка закрытых рабочих наборов процесса

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

  1. Разверните категорию Обработка частных страниц , щелкнув стрелку слева.

  2. Разверните категорию Активные . В списке показаны двоичные файлы и их использование активной памяти.

    Представление должно выглядеть примерно так:

    Пример отчета из консоли оценки Windows с использованием памяти процесса.

  3. Определите процесс, который использует большую часть памяти.

Вы можете повлиять на эту метрику, уменьшив количество приложений ,которые являются приложениями в разделе реестра Run или в папке Startup. Анализ влияния добавленных приложений.

Поставщики драйверов и программного обеспечения оказывают наибольшее влияние на эту метрику по способу разработки их кода. Найдите выделение больших объемов памяти в результатах, представленных в WAC. Кроме того, поставщикам программного обеспечения могут быть предоставлены трассировки производительности (хранящиеся в том же каталоге, что и результаты оценки) для поиска областей с большим объемом памяти, которые являются кандидатами для исследования сокращения использования памяти. Тщательный анализ выделений, даже небольших, может помочь разработчику найти распределения, которые складываются.

Шаг 3. Сбор данных постоянного набора с помощью WPR

На шагах 1 и 2 вы узнали, как собирать трассировки памяти с помощью оценки объема памяти. Эта оценка может записывать только трассировку для сценария загрузки. Вы можете записывать трассировки для любого сценария (запуск приложения, просмотр веб-страниц и т. д.) с помощью средства записи производительности Windows (WPR)

Выполните следующие действия, чтобы собрать трассировку с данными резидентного набора.

  1. Откройте Средство записи производительности Windows в меню "Пуск ".

  2. Выберите профили записи "Анализ первого уровня" и "Анализ постоянного набора" , но оставьте значения по умолчанию для других параметров.

  3. Нажмите кнопку Пуск и подождите несколько секунд.

    Снимок экрана: экран

  4. Нажмите кнопку Сохранить и сохраните трассировку ETL на диск.

Теперь у вас есть snapshot состава системной памяти.

Шаг 4. Интерпретация данных постоянного набора с помощью WPA

Следуйте приведенной ниже процедуре.

  1. Запустите Windows Анализатор производительности из меню Пуск.

  2. Откройте только что собранную трассировку ETL (меню Файл , Открыть...).

  3. Разверните набор памяти в Обозреватель Graph.

    Снимок экрана: представление обозревателя графов WPA.

  4. Перетащите диаграмму Резидентный набор на вкладку Анализ.

Представление должно выглядеть примерно так:

Снимок экрана: WPA с представлением вкладки

Проверьте, как представляются данные. Ниже приведены некоторые определения наиболее полезных столбцов для анализа верхнего уровня.

Столбец Определение
MMList

Список управления памятью, содержащий страницы.

  • Активные — страницы, которые в настоящее время находятся в частном рабочем наборе процесса или рабочем наборе ядра.

  • Резервный — неизмененные страницы в резервном списке. Они являются частью доступной памяти.

  • Modified — обработка частных страниц или страниц с файловой поддержкой, которые были изменены с момента последнего сохранения в постоянном хранилище.

  • ModifiedNoWrite — страницы, которые были изменены, но не будут сохранены в постоянном хранилище.

  • Переход — страницы при переходе между списками.

Процесс

Имя процесса, являющегося владельцем страниц. Эти сведения доступны только для личных страниц процесса. Даже если они не являются общими, все доступные для общего доступа страницы связаны с процессом "Неизвестно" (-1).

Описание

Представленное значение зависит от категории страницы. Пример:

  • Для изображений, драйверов, файлов и т. д. отображается полный путь к файлу и имя.

  • Для памяти пула отображается имя тега пула драйверов.

Категория страницы

Тип данных, содержащихся на странице, как определено ниже. Ниже приведены некоторые возможные категории.

  • CopyOnWriteImage — обработка частных страниц, созданных путем исправления таблицы адресов импорта исполняемых образов или перебазирования исполняемого файла.

  • Драйвер — кодовая страница для драйвера.

  • DriverFile — кодовые страницы, которые были считаны из исполняемого файла драйвера и сопоставлены как данные.

  • DriverLockedSystemPage — страницы режима ядра, которые блокируются или закрепляются в памяти, как правило, драйверами или ядром.

  • Изображение — страницы из .dll и .exe файлов, загруженных в виде исполняемых изображений.

  • MapFile — страницы файлов данных или изображений, загруженных в виде данных.

  • NonPagedPool — страницы, содержащие данные для нестраничного системного пула.

  • PagedPool — страницы, содержащие данные для страничного системного пула.

  • PFMappedSection — страницы сопоставленных в памяти разделов, поддерживаемых файлом подкачки.

  • SystemPage — страницы, содержащие записи таблицы системных страниц, используемые для сопоставления системных страниц, таких как пространство ввода-вывода, стеки ядра и списки дескрипторов памяти.

  • UserStack — страницы, содержащие данные пользовательского режима для каждого потока.

  • VirtualAlloc — страницы, выделенные API VirtualAlloc.

  • Win32Heap — страницы кучи.

Размер (МБ)

Общий размер страниц, агрегированных в каждой категории.

Шаг 6. Определение рабочих наборов процессов, влияющих на объем памяти

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

  1. Выберите предустановку Обработка закрытого рабочего набора .

    Снимок экрана: раскрывающийся список частного рабочего набора процесса WPA.

  2. Разверните группу Active MMList .

    1. Сосредоточьтесь на категории Активные , так как это то, что в настоящее время влияет на использование памяти.

    2. Резервные страницы могут быть освобождены при нехватке памяти.

    3. Измененные страницы могут быть записаны на диск и освобождены.

  3. Сортируйте по размеру, щелкнув заголовок столбца Размер (МБ).

  4. Определите процессы с наибольшим использованием. В качестве имен процессов могут отображаться Н/Д и "Неизвестно (-1)".

    • N/A содержит страницы, не связанные с какими-либо процессами, такими как память пула драйверов.

    • "Unknown (-1)" содержит страницы, доступные для общего доступа.

  5. Разверните процессы, чтобы просмотреть категорию страницы.

    1. Теперь на следующем рисунке можно просмотреть состав рабочего набора процесса.

    2. Основные категории должны быть VirtualAlloc или Win32Heap, которые мы проанализируем в упражнении 2.

    3. В приведенном ниже примере SearchIndexer.exe использует 21,7 МБ активной памяти через выделение кучи и 12,4 МБ через вызовы API VirtualAlloc .

    Пример таблицы, показывающей использование процесса.

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