Windows Azure. Диагностика и профилирование приложений. Часть 3

В предыдущих частях (см. часть 1 и часть 2) мы обсудили механизмы диагностики приложений, доступные на платформе Windows Azure. В заключительной части мы поговорим о способах профилирования приложений. Профилирование позволяет измерять работу приложения и анализировать собранные данные для выявления наиболее неэффективных с точки зрения использования ресурсов (процессора, памяти и т.п.) фрагментов кода. Данные, собираемые с помощью монитора диагностики, совмещенные с данными о работе приложения, полученными благодаря профилированию, помогут создавать приложения, оптимизированные для ресурсной модели Windows Azure – как с точки зрения ее потребления, так и с точки зрения оплаты.

Профилирование приложений

Начиная с версии 1.4, Visual Studio Tools for Windows Azure поддерживают профилирование приложений, работающих на платформе Windows Azure. При публикации приложения появляется дополнительная опция, позволяющая задать настройки профилирования для приложения. При выборе этой опции запускается т.н. «сессия профилирования» для каждого экземпляра роли. Созданная сессия профилирования отображается в отчете Performance Explorer.

Рассмотрим профилирование приложения на практике. Для этого создадим новый проект для Windows Azure, назовем его WA-PerfTest и добавим к проекту прикладную роль (worker role). Добавим функцию, которая будет специально неэффективно создавать строковую переменную:

И добавим вызов этой функции в метод Run() нашего приложения:

Начнем развертывание нашего приложения в Windows Azure. Для этого выберем название проекта в Solution Explorer, нажмем на нем правую кнопку «мыши» и выберем команду Publish. В диалоговой панели Publish Windows Azure Application в разделе Debug Settings выберем опцию Enable Profiling, затем – команду Settings для настройки механизма профилирования.

В диалоговой панели Profiling Settings выберем опцию по умолчанию – CPU Sampling, которая позволит профилировать использованием приложением ресурсов центрального процессора. Эту опцию рекомендуется использовать для первоначального анализа приложения и обнаружения наиболее «дорогих» с точки зрения процессорного времени функций, реализованных в приложении.

Другие доступные опции профилирования:

  • Опция Instrumentation - используется измерения вызовов функций и времени, затраченного на их выполнение. Этот способ профилирования подходит, например, для анализа проблем производительности при вводе/выводе
  • Опция .NET Memory Allocation – используется для отслеживания использования памяти. Собирается информация о времени жизни объектов и работе сборщика мусора
  • Опция Concurrency – используется для обнаружения потоков, зависящих от других потоков. Этот способ профилирования подходит для анализа многопоточных приложений и приложений с несколькими процессами
  • Опция Enable Tier Interaction Profilingиспользуется для профилирования многозвенных приложений.

Нажмем кнопку «Ок» для включения этой опции профилирования, затем – «Publish» для публикации нашего приложения в Windows Azure.

После того как наше приложение выполнило поставленную задачу, можно посмотреть на результаты профилирования. Сначала убедимся в том, что у нас есть вся необходимая информация. Выберем команду Tools | Options | Debugging и в разделе Symbols проверим, включен ли доступ к серверам символов Microsoft (Microsoft Symbol Servers) и настроен ли локальный кэш символов (в нашем примере – каталог c:\symbols).

Теперь в Server Explorer выберем экземпляр нашего приложения, нажмем правую кнопку «мыши» и выполним команду View Profiling Report.

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

Обратим внимание на то, что в разделе «Hot Path», где отображается наиболее «дорогой» с точки зрения использования ресурсов код, отмечена именно наша функция, написанная специально не самым оптимальным образом.

Переход к детальной информации по самому «дорогому» коду, позволит нам получить дополнительную информацию о работе функции и даже посмотреть ее исходный код.

Более подробно про средства профилирования, включенные в состав Visual Studio, см.https://msdn.microsoft.com/ru-ru/library/z9z62c29.aspx.

В данном обзоре мы рассмотрели средства диагностики и профилирования, доступные для приложений, выполняющихся на платформе Windows Azure. Эти средства позволяют не только получить представление о различных аспектах работы как самого приложения, так и инфраструктуры, но и служат хорошим инструментом для оптимизации «облачных» приложений.