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


Локальное тестирование производительности Облачной службы (классической) в эмуляторе вычислений Azure с помощью профилировщика Visual Studio

Внимание

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.

Для тестирования производительности облачных служб доступны различные средства и методы. При публикации облачной службы в Azure вы можете собрать в Visual Studio данные профилирования и затем проанализировать их локально, как описано в разделе о профилировании приложения Azure. Вы также можете использовать диагностика для отслеживания многочисленных счетчиков производительности, как описано в разделе "Использование счетчиков производительности в Azure". Также может возникнуть необходимость выполнить профилирование приложения локально в эмуляторе вычислений перед развертыванием его в облаке.

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

Настройка Visual Studio для профилирования

Во-первых, есть несколько параметров настройки Visual Studio, которые могут быть полезны при выполнении профилирования. Чтобы получить представление о отчетах профилирования, вам нужны символы (PDB-файлы) для приложения, а также символы для системных библиотек. Убедитесь, что вы ссылаетесь на доступные серверы символов; Для этого в меню "Сервис" в Visual Studio выберите "Параметры", а затем выберите "Отладка", а затем "Символы". Убедитесь, что в Местоположение файла символов (PDB)указаны серверы символов корпорации Майкрософт. Вы также можете ссылаться https://referencesource.microsoft.com/symbolsна файлы символов, которые могут содержать больше файлов символов.

Параметры

При желании можно упростить создаваемые профилировщиком отчеты, установив флажок "Только мой код". При включенном параметре "Только мой код" стеки вызова функции упрощаются благодаря скрытию в отчетах вызовов в пределах библиотек и платформы .NET Framework. В меню Средства выберите Параметры. Затем разверните узел Средства производительности и выберите команду Общие. Установите флажок Включить только мой код для отчетов профилировщика.

Параметры

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

Роли проекта облачной службы Azure

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

public class Concatenator
{
    public static string Concatenate(int number)
    {
        int count;
        string s = "";
        for (count = 0; count < number; count++)
        {
            s += "\n" + count.ToString();
        }
        return s;
    }
}

Вызовите этот код из метода RunAsync класса, производного от рабочей роли RoleEntryPoint. (Игнорируйте предупреждение о том, что метод выполняется синхронно.)

private async Task RunAsync(CancellationToken cancellationToken)
{
    // TODO: Replace the following with your own logic.
    while (!cancellationToken.IsCancellationRequested)
    {
        Trace.TraceInformation("Working");
        Concatenator.Concatenate(10000);
    }
}

Выполните сборку и запуск облачной службы локально без отладки (Ctrl + F5) и с установленным в конфигурации решения параметром Выпуск. Этот параметр гарантирует, что все файлы и папки создаются для локального запуска приложения и запускаются все эмуляторы. Чтобы убедиться, что рабочая роль запущена, запустите пользовательский интерфейс эмулятора вычислений на панели задач.

Присоединение к процессу

Вместо профилирования приложения с помощью его запуска в интегрированной среде разработки Visual Studio 2010 необходимо присоединить профилировщик к выполняющемуся процессу.

Чтобы подключить профилировщик к процессу, перейдите в меню "Анализ ", выберите "Профилировщик" и выберите "Подключить или отключить".

Параметр

Для роли рабочего процесса найдите процесс WaWorkerHost.exe.

Процесс WaWorkerHost

Если папка проекта находится на сетевом диске, профилировщик запросит указать другое расположение для сохранения отчетов профилирования.

Можно также присоединиться к веб-роли путем присоединения к WaIISHost.exe. При наличии в приложении нескольких процессов роли рабочего процесса они идентифицируются по значению processID. Запрос processID можно выполнить в программе путем обращения к объекту Process. Например, если добавить этот код в метод Run класса, производного от RoleEntryPoint, в роли можно просмотреть пользовательский интерфейс эмулятора вычислений, чтобы узнать, к какому процессу подключиться.

var process = System.Diagnostics.Process.GetCurrentProcess();
var message = String.Format("Process ID: {0}", process.Id);
Trace.WriteLine(message, "Information");

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

Запуск пользовательского интерфейса эмулятора вычислений

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

Просмотр идентификатора процесса

После присоединения выполните действия в пользовательском интерфейсе приложения (при необходимости), чтобы воспроизвести сценарий.

Чтобы остановить профилирование, щелкните ссылку Остановить профилирование .

Параметр

Просмотр отчетов о производительности

Отображается отчет о производительности приложения.

На этом этапе профилировщик останавливает выполнение, сохраняет данные в VSP-файл и выводит отчет, показывающий анализ этих данных.

Отчет профилировщика

Если в горячем пути отображается String.wstrcpy, выберите "Просто мой код", чтобы изменить представление, чтобы отобразить только пользовательский код. Если отображается String.Concat, попробуйте нажать кнопку "Показать весь код ".

Вы увидите, что метод Concatenate и String.Concat занимают большую часть времени выполнения.

Анализ отчета

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

Предупреждения о производительности

Внесение изменений и сравнение производительности

Можно также сравнить производительность до и после изменения кода. Чтобы заменить операцию объединения строк с помощью StringBuilder, остановите выполняемый процесс и измените код:

public static string Concatenate(int number)
{
    int count;
    System.Text.StringBuilder builder = new System.Text.StringBuilder("");
    for (count = 0; count < number; count++)
    {
        builder.Append("\n" + count.ToString());
    }
    return builder.ToString();
}

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

Параметр

В отчетах выделены различия между двумя прогонами.

Сравнительный отчет

Поздравляем! Вы начали работу с профилировщиком.

Устранение неполадок

  • Профилирование сборки выпуска и запуск без отладки.
  • Если параметр "Подключить или отсоединить" не включен в меню Профилировщика, запустите мастер производительности.
  • С помощью пользовательского интерфейса эмулятора вычислений просмотрите состояние приложения.
  • В случае возникновения неполадок с запуском приложения в эмуляторе или присоединением профилировщика завершите работу эмулятора вычислений и перезапустите его. Если неполадка не будет устранена, попробуйте перезагрузить компьютер. Это может происходить, если эмулятор вычислений используется для приостановки и удаления развертываний.
  • Если вы использовали любую из команд профилирования из командной строки, особенно глобальные параметры, убедитесь, что вы вызываете VSPerfClrEnv /globaloff и завершаете работу VsPerfMon.exe.
  • При выборке отображается сообщение "PRF0025: нет собранных данных", проверьте активность ЦП процесса. Приложения, не выполняющие вычисление, могут не создавать данные выборки. Это также может быть связано с завершением процесса до начала сбора данных. Убедитесь, что метод Run для роли, которую профиль не завершает.

Next Steps

Инструментирование двоичных файлов Azure в эмуляторе не поддерживается в профилировщике Visual Studio, но если вы хотите протестировать выделение памяти, этот параметр можно выбрать при профилировании. Можно также выбрать параллельное профилирование — это поможет выявить затраты времени на конкурирование потоков за блокировку, или профилирование взаимодействия слоев, что поможет отслеживать проблемы с производительностью в ходе обмена данными между слоями приложения, чаще всего между уровнем данных и ролью рабочего процесса. Можно просмотреть запросы к базе данных, создаваемые приложением, и использовать данные профилирования для повышения эффективности работы с базой данных. Сведения о профилировании межуровневого взаимодействия см. в записи блога с пошаговым руководством об использовании профилировщика межуровневого взаимодействия в Visual Studio Team System 2010.