Модернизация приложений
Данный цикл статей посвящен модернизации приложений — процессу создания приложений, которые корректно используют ресурсы операционной системы, не нарушают ее стабильность, позволяют измерять их производительность, интегрируются с сервисами ядра системы, корректно участвуют в жизненном цикле операционной системы, корректно работают с подсистемой электропитания и могут быть сконфигурированы с помощью новых средств, включенных в состав операционной системы Windows 7.
Наше знакомство с модернизацией приложений мы начинаем с обсуждения средств, входящих в состав операционной системы Windows, которые позволяют определять состояние памяти, задач, процессов, следить за производительностью, событиями, вычислять индекс производительности и получать данные из различных подсистем. Умение применять эти средства может пригодиться не только разработчикам и ИТ-специалистам, но и конечным пользователям.
В состав операционной системы входит большой набор средств, позволяющих определять состояние памяти, задач, процессов, следить за производительностью, событиями, вычислять индекс производительности и получать данные из различных подсистем. Далее мы рассмотрим некоторые из этих средств — они перечислены в табл. 1.
Утилита Task Manager
Утилита Task Manager (%windir%\system32\taskmgr.exe) предоставляет данные о состоянии памяти, задач, процессов, сервисов, быстродействии системы, сетевых соединениях и пользователях. Начиная с Windows Vista в утилиту Task Manager внесен ряд изменений, позволивших улучшить отображение основных характеристик системы. Так, на вкладке Performance добавлены данные об общем времени работы системы (Up Time), более понятными стали данные об использовании памяти, добавлена информация о ссылках, процессах и потоках. На вкладке Processes добавлены описания запущенных процессов и командных строк. Помимо этого добавлена вкладка Services.
Утилиту Task Manager можно вызвать одним из следующих способов:
- комбинацией клавиш Ctrl-Shift-Esc;
- вводом команды TaskMgr в меню Run (клавиша Windows + R);
- выбором команды Start Task Manager при нажатии комбинации клавиш Ctrl-Alt-Del;
- выбором команды Start Task Manager при нажатии правой кнопки мыши на полосе задач (Task Bar).
Отметим, что в операционной системе Windows не существует понятия задачи (task) как таковой — Task Manager позволяет управлять приложениями, процессами и сервисами. Поэтому экран утилиты представляет собой серию вкладок: Applications, Processes, Services, Performance, Networking и Users.
Вкладка Applications содержит информацию о запущенных пользовательских приложениях и при необходимости позволяет переключиться на процесс, стоящий за приложением, завершить приложение или создать дамп-файл. Помимо этого можно определить статус приложения и переключить фокус на его окно.
Вкладка Processes содержит список процессов, запущенных в системе. По умолчанию отображаются только процессы для текущего интерактивного пользователя (номер сессии >0), а при необходимости можно увидеть процессы всех пользователей. Для этого необходимо нажать кнопку Show processes from all users.
Для отображения информации о процессах следует выполнить команду View —> Select Columns и выбрать колонки, содержащие интересующую пользователя информацию (рис. 1).
Рис. 1. Данные о процессах в утилите Task Manager
Новыми для Vista и Windows 7 являются такие колонки, как User Account Control (UAC) Virtualization и Data Execution Prevention. Первая указывает, включено ли для процесса перенаправление файловых операций, вторая — включена ли для процесса опция Data Execution Prevention (DEX). Колонка Image Path Name позволяет получить полный адрес процесса на диске. Отметим, что для некоторых системных процессов и компонентов операционной системы путь может не отображаться.
Также отметим колонку Description — описание процесса, возможность перейти в папку с исполняемым файлом (команда Open File Location) и возможность посмотреть сервисы, представленные выбранными процессами (имена сервисов будут подсвечены), а также создать дамп-файл процесса, который будет сохранен в каталоге %temp%.
Команда Properties позволяет получить доступ к панели свойств процесса.
Вкладка Services впервые появилась в Windows Vista и позволяет получить список сервисов, запущенных в системе. Как и в случае с процессами, для сервисов поддерживается возможность перейти к процессу (команда Go to Process — рис. 2).
Рис. 2. Список сервисов в Task Manager
Для процессов отображается название, идентификатор процесса, описание, статус и группа, к которой принадлежит тот или иной сервис. Кнопка Service в правом нижнем углу экрана позволяет вызвать панель управления сервисами — Service Control Manager.
Вкладка Performance отображает данные о загрузке процессора (процессоров) и использовании оперативной памяти (рис. 3).
Рис. 3. Загрузка процессора и памяти в Task Manager
В Vista и Windows 7 эти данные отображаются по-новому. Так, показывается объем установленной на компьютере памяти (Total, в мегабайтах), процент доступной памяти, общее время работы системы (Up Time), число процессоров, потоков и ссылок. Кнопка Resource Monitor позволяет вызвать утилиту Resource Monitor (см. ниже). Поле Cached указывает на объем памяти, используемый системными ресурсами, поле Available содержит объем свободной и standby-памяти, поле Free — объем доступной, не используемой в данный момент памяти.
Вкладки Networking и Users остались практически такими же, как в Windows XP. Вкладка Networking отображает сетевой трафик — для обычных и беспроводных подключений, а вкладка Users показывает пользователей, подключенных в данный момент к системе, — локальных и удаленных.
Утилита System Configuration
Получить основные данные о системе можно и с помощью утилиты System Configuration (%winroot%\system32\msconfig.exe). Информация отображается на пяти вкладках: общая информация о процессе загрузкb системы, конфигурация загрузки системы, сервисы, программы, загружаемые при старте системы, и утилиты. Утилита обладает рядом уникальных возможностей. Например, в списке сервисов можно отключить отображение всех сервисов Microsoft, что полезно в процессе нахождения проблем с сервисами. Список приложений, запускаемых при старте системы, может быть отличным источником информации при анализе производительности системы. Утилита System Configuration также обеспечивает доступ к ряду других утилит (вкладка Tools) — табл. 2.
Утилита DriverQuery (%windir%\DriverQuery.exe) позволяет получить список установленных в системе драйверов. Отображается имя драйвера, полное имя, тип драйвера (Kernel, File System и т.п.). Для получения расширенного списка следует использовать опцию /v. Утилита позволяет получить список в виде таблицы, списка или в виде спиcка, разделенного запятыми (CSV), — последний может быть открыт в Microsoft Excel для последующего анализа.
Для получения информации о процессах можно применять утилиту QProcess (%windir%\system32\qprocess.exe). Для составления списка всех процессов и сервисов следует использовать опцию *. Предусмотрена возможность получения списка процессов, ассоциированных с указанной программой, процессов по идентификатору, для указанной сессии и т.п.
Информация о процессах также доступна через утилиту TaskList (%windir%\system32\tasklist.exe). Отображается название образа, идентификатор процесса, название и номер сессии, а также использованная процессом память. Опция /SVC показывает сервисы, включенные в процессы, опция /V — расширенную информацию. Вывод осуществляется в списке, таблице или в виде информации, разделенной запятыми (CSV).
Утилита MSInfo32
Утилита MSInfo отображает различную информацию о системе. Данные представляются в виде серии экранов: обзор системы (System Summary), аппаратные ресурсы (Hardware Resources), компоненты (Components) и программная среда (Software Environment).
На экране обзора системы отображаются тип операционной системы, ее издание, данные о производителе компьютера, типе системы, версии и производителе BIOS, местоположении Windows и системного каталога, а также об объеме установленной памяти и ее распределении.
Раздел, посвященный аппаратным ресурсам, содержит данные о распределении портов вводавывода, IRQ и адресов памяти, использовании DMA-каналов, адресах распределения системных устройств и ряд других данных, которые могут быть полезны для определения системных конфликтов, настроек устройств или настроек USB-устройств, подключенных к системе.
Раздел Компоненты содержит информацию о дисковых устройствах, мультимедийных устройствах, модемах и других компонентах, установленных в системе.
Описание программной среды включает информацию о драйверах, сетевых соединениях, переменных среды, запущенных задачах, загруженных модулях, сервисах, программах, выполняемых при старте системы, и сообщениях подсистемы Windows Error Reporting (рис. 4).
Рис. 4. Утилита MSInfo: обзор системы
Несмотря на то что эти данные могут быть получены и из других источников, например Device Manager содержит подробную информацию о всех устройствах, доступных в системе, драйверах, используемых ресурсах и т.п., наличие единого свода ключевых характеристик системы может оказаться крайне полезным при поиске возможных проблем, связанных с производительностью и работой приложений и сервисов.
Утилита MSInfo поддерживает экспорт данных в двух форматах: в виде текстового файла и в виде файла с расширением *.nfo (System Information File), который представляет собой XML-файл, доступный для программной обработки.
Утилита Performance Monitor
Применяя подсистему Event Tracing for Windows (более подробно речь о ней пойдет в главе «Измерение производительности системы и приложений»), операционная система постоянно измеряет себя с помощью набора предопределенных трассировок. Используя утилиту Windows Performance Monitor (%windir%\system32\perfmon.msc /s), мы можем получить список изначально заданных трассировок — для этого в левой панели утилиты в разделе Data Collector Sets необходимо выбрать подраздел Event Trace Sessions. В подразделе Startup Event Trace Sessions показаны все доступные системные трассировки и указаны те, что автоматически активируются при запуске операционной системы (рис. 5).
Рис. 5. Утилита Windows Performance Monitor: системные трассировки
На основании собираемой системой информации, а также с помощью дополнительных компонентов, таких как счетчики производительности, можно получить представление о производительности системы как в исторической перспективе, так и в реальном времени.
Для получения информации в реальном времени следует перейди в раздел Monitoring Tools —> Performance Monitor и далее добавить интересующие нас счетчики производительности. По умолчанию используется счетчик \Processor Information(_Total)\ % Processor Time, но мы можем добавить любое их количество в зависимости от конкретного сценария измерения системы. Для этого вверху правой части экрана надо нажать кнопку «+» (показана зеленым цветом) и в панели Add Counters выбрать интересующие нас счетчики производительности. В панели отображаются доступные счетчики производительности, объединенные в функциональные группы, — Process, Processor Information, System, Battery Status, Cache, Memory и т.п. Включение опции Show Description позволяет получить описание как группы, так и отдельных счетчиков (рис. 6).
Рис. 6. Утилита Windows Performance Monitor: счетчики производительности
Наборы собираемых данных (Data Collector Sets) состоят из двух групп: System Diagnostics и System Performance. Первая группа — System Diagnostics — отвечает за сбор общей информации о системе, которая извлекается из записей Windows Management Instrumentation (WMI), ре-естра, ряда ключевых счетчиков производительности и трассы Windows Kernel Trace. Вторая группа — System Performance — собирает информацию о производительности системы из соответствующих счетчиков и трассы Windows Kernel Trace. По умолчанию сбор информации не осуществляется, для его активации необходимо выполнить команду Start, нажав правую кнопку мыши на соответствующем наборе данных.
Обратите внимание на то, что после запуска сбора данных изменится изображение соответствующей иконки набора данных — у нее появится символ Play, будут показаны задействованные механизмы поставки информации: имя механизма, его тип и местоположение собираемых данных в файловой системе. По умолчанию для системной диагностики это папка %SystemDrive%\PerfLogs\SystemDiagnostics\, в которой создается каталог с именем отчета в виде ИмяКомпьютера_ДатаСоздания_Номер, например ALEXEIF_UL20A_20091129_000001. Кроме того, в разделе Reports —> System появится отчет, имя которого будет сформировано по тем же принципам, что и описанное ранее имя каталога.
Собранные данные можно просмотреть как в виде отчета внутри Windows Performance Monitor, так и отдельно — открыв файл Report1ext1l в соответствующей папке, либо, при необходимости, в виде отдельных XML-файлов с описанием компонентов системы, которые также находятся в соответствующей папке (рис. 7).
Рис. 7. Утилита Windows Performance Monitor: результаты сбора данных
Обратите внимание на объем отчета, создаваемого утилитой Windows Performance Monitor, — более 70 страниц, с подробным описанием всех компонентов системы и их текущего состояния (рис. 8).
Рис. 8. Утилита Windows Performance Monitor: диагностический отчет
Отметим, что в результате выполнения системной диагностики будут созданы два дополнительных файла, которые также будут записаны в папку отчета: Performance Counter.blg и NTKernel.etl. Первый представляет собой информацию о счетчиках производительности, которые были использованы в процессе измерения, второй — это трассировка ряда системных компонентов: дискового вводавывода, использования диска, использования диска отдельными процессами, самих процессов, а также событий, происходивших во время сбора данных.
Файл NTKernel.etl может быть проанализирован с помощью утилиты Performance Analyser (входит в состав Windows Performance Toolkit — более подробно о ней см. в разделе «Измерение производительности системы и приложений»). Пример графического представления данных из этого файла показан на рис. 9.
Рис. 9. Характеристики производительности, отображаемые утилитой
Windows Performance Analyzer
Отчет System Diagnostics содержит исчерпывающую информацию о системе, ее компонентах и может использоваться в различных сценариях измерения как самой системы, так и выполняемых под ее управлением процессов. Отметим, что собранные в результате построения отчета данные могут быть переданы разработчикам для детального анализа и применяться в процессе тестирования разрабатываемой системы.
Второй набор данных — System Performance — служит для анализа производительности системы. Выполнение команды Start приводит к запуску процесса сбора информации о производительности и созданию отчета, который располагается в группе Reports —> System —> System Performance. В отличие от информации о системе, информация о производительности сохраняется в двух файлах: Performance Counter.blg и NTKernel.etl, которые располагаются в папке %SystemDrive%\PerfLogs\System\Performance.
По умолчанию сбор данных о производительности системы занимает 60 секунд (это делается для того, чтобы не загружать систему), после этого можно просмотреть отчет System Performance Report, объем которого составляет порядка 30 страниц. Он состоит из общего обзора, где указываются основные данные об использовании процессора, диска и памяти, а также расширенных отчетов с результатами диагностики, исследования работы процессора, его нахождении в активном состоянии и в состоянии простоя, производительности сетевой и дисковой подсистем, утилизации памяти и общей системной статистики.
Как и в случае с диагностикой системы, данные отчета можно просмотреть в утилите Performance Monitor, либо открыв файл Report.HTML из соответствующей папки, либо исследовав отдельные файлы с помощью предназначенных для этого средств (рис. 10).
Рис. 10. Утилита Windows Performance Monitor: отчет о производительности
Итак, мы получили общее представление о том, какие штатные средства для сбора информации предоставляет операционная система. Используя собственные наборы данных (группа Data Collector Sets —> User Defined), мы можем комбинировать информацию из различных счетчиков производительности, данных трассировки и данных о конфигурации системы для получения уникальных наборов данных, отражающих требования тех или иных сценариев тестирования или мониторинга системы.
В следующей статье данного цикла мы продолжим обзор утилит Windows.