Testowanie wydajności usługi w chmurze (klasycznej) lokalnie w emulatorze obliczeń platformy Azure przy użyciu profilera programu Visual Studio

Ważne

Cloud Services (wersja klasyczna) jest teraz przestarzała dla nowych klientów i zostanie wycofana 31 sierpnia 2024 r. dla wszystkich klientów. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager Azure Cloud Services (wsparcie dodatkowe).

Dostępne są różne narzędzia i techniki do testowania wydajności usług w chmurze. Podczas publikowania usługi w chmurze na platformie Azure program Visual Studio może zbierać dane profilowania, a następnie analizować je lokalnie zgodnie z opisem w artykule Profilowanie aplikacja systemu Azure. Możesz również użyć diagnostyki do śledzenia różnych liczników wydajności, zgodnie z opisem w temacie Korzystanie z liczników wydajności na platformie Azure. Możesz również profilować aplikację lokalnie w emulatorze obliczeniowym przed wdrożeniem jej w chmurze.

W tym artykule opisano metodę próbkowania procesora CPU profilowania, którą można wykonać lokalnie w emulatorze. Próbkowanie procesora CPU to metoda profilowania, która nie jest bardzo uciążliwa. W wyznaczonym interwale próbkowania profiler tworzy migawkę stosu wywołań. Dane są zbierane w danym okresie i wyświetlane w raporcie. Ta metoda profilowania zwykle wskazuje, gdzie w aplikacji intensywnie korzystającej z obliczeń większość pracy procesora CPU jest wykonywana. Daje to możliwość skoncentrowania się na "ścieżce gorącej", w której aplikacja spędza najwięcej czasu.

1: Konfigurowanie programu Visual Studio na potrzeby profilowania

Najpierw istnieje kilka opcji konfiguracji programu Visual Studio, które mogą być przydatne podczas profilowania. Aby zrozumieć raporty profilowania, potrzebne są symbole (pliki pdb) dla aplikacji, a także symbole bibliotek systemowych. Należy upewnić się, że odwołujesz się do dostępnych serwerów symboli. Aby to zrobić, w menu Narzędzia w programie Visual Studio wybierz pozycję Opcje, a następnie wybierz pozycję Debugowanie, a następnie pozycję Symbole. Upewnij się, że serwery symboli firmy Microsoft znajdują się na liście lokalizacji plik symboli (.pdb). Możesz również odwołać się do https://referencesource.microsoft.com/symbolspliku , który może zawierać dodatkowe pliki symboli.

Opcje symboli

W razie potrzeby można uprościć raporty generowane przez profilera, ustawiając opcję Tylko mój kod. Po włączeniu opcji Tylko mój kod stosy wywołań funkcji są uproszczone, dzięki czemu wywołania całkowicie wewnętrzne bibliotek i .NET Framework są ukryte przed raportami. W menu Narzędzia wybierz pozycję Opcje. Następnie rozwiń węzeł Narzędzia wydajności , a następnie wybierz pozycję Ogólne. Zaznacz pole wyboru włącz tylko mój kod dla raportów profilera.

Tylko moje opcje kodu

Możesz użyć tych instrukcji z istniejącym projektem lub z nowym projektem. Jeśli utworzysz nowy projekt, aby wypróbować techniki opisane poniżej, wybierz projekt usługi w chmurze platformy Azure w języku C#, a następnie wybierz rolę internetową i rolę procesu roboczego.

Role projektu usługi w chmurze platformy Azure

Na przykład dodaj kod do projektu, który zajmuje dużo czasu i pokazuje oczywisty problem z wydajnością. Na przykład dodaj następujący kod do projektu roli procesu roboczego:

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;
    }
}

Wywołaj ten kod z metody RunAsync w klasie pochodnej roli procesu roboczego RoleEntryPoint. (Ignoruj ostrzeżenie dotyczące metody uruchomionej synchronicznie).

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

Skompiluj i uruchom usługę w chmurze lokalnie bez debugowania (Ctrl+F5) z konfiguracją rozwiązania ustawioną na Release (Wydanie). Dzięki temu wszystkie pliki i foldery są tworzone do uruchamiania aplikacji lokalnie i gwarantuje, że wszystkie emulatory zostaną uruchomione. Uruchom interfejs użytkownika emulatora obliczeń z paska zadań, aby sprawdzić, czy rola procesu roboczego jest uruchomiona.

2: Dołączanie do procesu

Zamiast profilowania aplikacji, uruchamiając ją z poziomu środowiska IDE programu Visual Studio 2010, należy dołączyć profilera do uruchomionego procesu.

Aby dołączyć profilera do procesu, w menu Analiza wybierz pozycję Profiler i Dołącz/Odłącz.

Opcja Dołącz profil

W przypadku roli procesu roboczego znajdź proces WaWorkerHost.exe.

Proces WaWorkerHost

Jeśli folder projektu znajduje się na dysku sieciowym, profiler wyświetli monit o podanie innej lokalizacji w celu zapisania raportów profilowania.

Możesz również dołączyć do roli sieci Web, dołączając ją do WaIISHost.exe. Jeśli w aplikacji istnieje wiele procesów roli procesu roboczego, należy użyć identyfikatora processID, aby je odróżnić. Aby programowo wykonać zapytanie o identyfikator procesu, można uzyskać dostęp do obiektu Process. Jeśli na przykład dodasz ten kod do metody Run klasy pochodnej RoleEntryPoint w roli, możesz przejrzeć dziennik w interfejsie użytkownika emulatora obliczeń, aby dowiedzieć się, z jakim procesem nawiązać połączenie.

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

Aby wyświetlić dziennik, uruchom interfejs użytkownika emulatora obliczeń.

Uruchamianie interfejsu użytkownika emulatora obliczeń

Otwórz okno konsoli dziennika roli procesu roboczego w interfejsie użytkownika emulatora obliczeniowego, klikając pasek tytułu okna konsoli. Identyfikator procesu można wyświetlić w dzienniku.

Wyświetlanie identyfikatora procesu

Po dołączeniu wykonaj kroki w interfejsie użytkownika aplikacji (w razie potrzeby), aby odtworzyć scenariusz.

Jeśli chcesz zatrzymać profilowanie, wybierz link Zatrzymaj profilowanie .

Opcja Zatrzymaj profilowanie

3. Wyświetlanie raportów wydajności

Zostanie wyświetlony raport wydajności aplikacji.

W tym momencie profiler przestaje wykonywać, zapisuje dane w pliku vsp i wyświetla raport przedstawiający analizę tych danych.

Raport profilera

Jeśli w ścieżce gorącej zostanie wyświetlony ciąg String.wstrcpy, kliknij pozycję Tylko mój kod, aby zmienić widok, aby wyświetlić tylko kod użytkownika. Jeśli zostanie wyświetlony ciąg String.Concat, spróbuj nacisnąć przycisk Pokaż cały kod.

Powinna zostać wyświetlona metoda Concatenate i Ciąg.Concat, która zajmuje dużą część czasu wykonywania.

Analiza raportu

Jeśli kod łączenia ciągów został dodany w tym artykule, w tym artykule powinno zostać wyświetlone ostrzeżenie na liście zadań. Może również zostać wyświetlone ostrzeżenie, że istnieje nadmierna ilość pamięci, która jest spowodowana liczbą utworzonych i usuniętych ciągów.

Ostrzeżenia dotyczące wydajności

4. Wprowadzanie zmian i porównywanie wydajności

Możesz również porównać wydajność przed zmianą kodu i po nim. Zatrzymaj uruchomiony proces i zmodyfikuj kod, aby zastąpić operację łączenia ciągów za pomocą elementu 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();
}

Wykonaj inny przebieg wydajności, a następnie porównaj wydajność. W Eksploratorze wydajności, jeśli przebiegi znajdują się w tej samej sesji, możesz wybrać oba raporty, otworzyć menu skrótów i wybrać pozycję Porównaj raporty wydajności. Jeśli chcesz porównać przebieg z uruchomieniem w innej sesji wydajności, otwórz menu Analizuj i wybierz pozycję Porównaj raporty wydajności. Określ oba pliki w wyświetlonym oknie dialogowym.

Opcja Porównaj raporty wydajności

Raporty wyróżniają różnice między dwoma przebiegami.

Raport porównawczy

Gratulacje! Rozpoczęto pracę z profilerem.

Rozwiązywanie problemów

  • Upewnij się, że profilujesz kompilację wydania i rozpoczynasz bez debugowania.
  • Jeśli opcja Dołączanie/odłączanie nie jest włączona w menu Profilera, uruchom Kreatora wydajności.
  • Użyj interfejsu użytkownika emulatora obliczeniowego, aby wyświetlić stan aplikacji.
  • Jeśli masz problemy z uruchamianiem aplikacji w emulatorze lub dołączaniem profilera, zamknij emulator obliczeniowy i uruchom go ponownie. Jeśli to nie rozwiąże problemu, spróbuj uruchomić ponownie. Ten problem może wystąpić, jeśli używasz emulatora obliczeniowego do wstrzymania i usunięcia uruchomionych wdrożeń.
  • Jeśli użyto dowolnego polecenia profilowania z wiersza polecenia, zwłaszcza ustawień globalnych, upewnij się, że program VSPerfClrEnv /globaloff został wywołany i że VsPerfMon.exe został zamknięty.
  • Jeśli podczas próbkowania zostanie wyświetlony komunikat "PRF0025: Nie zebrano żadnych danych", sprawdź, czy proces, do którego dołączono, ma działanie procesora CPU. Aplikacje, które nie wykonują żadnej pracy obliczeniowej, mogą nie generować żadnych danych próbkowania. Istnieje również możliwość, że proces zakończył się przed wykonaniem jakiegokolwiek próbkowania. Sprawdź, czy metoda Run dla roli, którą profilujesz, nie kończy się.

Następne kroki

Instrumentacja plików binarnych platformy Azure w emulatorze nie jest obsługiwana w profilerze programu Visual Studio, ale jeśli chcesz przetestować alokację pamięci, możesz wybrać tę opcję podczas profilowania. Można również wybrać profilowanie współbieżności, co pomaga określić, czy wątki marnują czas konkurowania o blokady, czy profilowanie interakcji warstwy, co pomaga w śledzeniu problemów z wydajnością podczas interakcji między warstwami aplikacji, najczęściej między warstwą danych a rolą procesu roboczego. Możesz wyświetlić zapytania bazy danych generowane przez aplikację i użyć danych profilowania, aby poprawić korzystanie z bazy danych. Aby uzyskać informacje na temat profilowania interakcji w warstwie, zobacz wpis w blogu Walkthrough: Using the Tier Interaction Profiler in Visual Studio Team System 2010 (Przewodnik: używanie profilera interakcji warstwy w programie Visual Studio Team System 2010).