Testování výkonu cloudové služby místně v emulátoru Azure Compute pomocí sady Visual Studio ProfilerTesting the Performance of a Cloud Service Locally in the Azure Compute Emulator Using the Visual Studio Profiler

Různé nástroje a techniky jsou k dispozici pro testování výkonu cloudové služby.A variety of tools and techniques are available for testing the performance of cloud services. Při publikování v cloudové službě Azure, můžete použít Visual Studio shromáždění profilačních dat a analyzovat místně, jak je popsáno v profilace aplikace Azure.When you publish a cloud service to Azure, you can have Visual Studio collect profiling data and then analyze it locally, as described in Profiling an Azure Application. Můžete také použít diagnostiky ke sledování různých čítačů výkonu, jak je popsáno v pomocí čítačů výkonu v Azure.You can also use diagnostics to track a variety of performance counters, as described in Using performance counters in Azure. Můžete také chtít profilování aplikace místně v emulátoru služby compute před nasazením do cloudu.You might also want to profile your application locally in the compute emulator before deploying it to the cloud.

Tento článek se věnuje metodě profilování pomocí vzorkování procesoru, která se dá dělat místně v emulátoru.This article covers the CPU Sampling method of profiling, which can be done locally in the emulator. Vzorkování procesoru je metoda profilování, která není velmi nežádoucí.CPU sampling is a method of profiling that is not very intrusive. V intervalech určené vzorkování profileru pořídí snímek zásobníku volání.At a designated sampling interval, the profiler takes a snapshot of the call stack. Data se shromažďují po určitou dobu a zobrazí v sestavě.The data is collected over a period of time, and shown in a report. Tato metoda profilování ukazuje kde ve výpočetně náročné aplikaci většina práce procesoru se provádí.This method of profiling tends to indicate where in a computationally intensive application most of the CPU work is being done. Získáte tak možnost se zaměřit na "kritické cestě" kde je vaše aplikace spotřebuje většinu času.This gives you the opportunity to focus on the "hot path" where your application is spending the most time.

1: konfigurace pro profilaci sady Visual Studio1: Configure Visual Studio for profiling

Nejprve se pár možností konfigurace sady Visual Studio, které můžou být užitečné při profilování.First, there are a few Visual Studio configuration options that might be helpful when profiling. Dávat smysl profilování sestavy, budete potřebovat symboly (soubory PDB) pro aplikace a také symboly pro systémové knihovny.To make sense of the profiling reports, you'll need symbols (.pdb files) for your application and also symbols for system libraries. Bude potřeba Ujistěte se, že odkazují na servery symbolů k dispozici.You'll want to make sure that you reference the available symbol servers. K tomu, na nástroje nabídku v sadě Visual Studio, zvolte možnosti, klikněte na tlačítko ladění, pak symboly.To do this, on the Tools menu in Visual Studio, choose Options, then choose Debugging, then Symbols. Ujistěte se, že servery symbolů společnosti Microsoft je uveden v části Symbol umístění souborů (.pdb).Make sure that Microsoft Symbol Servers is listed under Symbol file (.pdb) locations. Je také možné odkazovat http://referencesource.microsoft.com/symbols, který může mít soubory dalších symbolů.You can also reference http://referencesource.microsoft.com/symbols, which might have additional symbol files.

Možnosti symbolů

V případě potřeby můžete zjednodušit sestavy, které generuje profiler nastavením pouze můj kód.If desired, you can simplify the reports that the profiler generates by setting Just My Code. S povoleným kódem Just My jsou zjednodušené zásobníky volání funkce tak, aby volání zcela interní knihovny a rozhraní .NET Framework jsou skryté ze sestav.With Just My Code enabled, function call stacks are simplified so that calls entirely internal to libraries and the .NET Framework are hidden from the reports. Na nástroje nabídce zvolte možnosti.On the Tools menu, choose Options. Pak rozbalte nástroje pro měření výkonu uzel a zvolte Obecné.Then expand the Performance Tools node, and choose General. Zaškrtněte políčko pro povolit volbu pouze vlastní kód pro sestavy profileru.Select the checkbox for Enable Just My Code for profiler reports.

Pouze můj kód – možnosti

Můžete použít tyto pokyny s existující projekt nebo s novým projektem.You can use these instructions with an existing project or with a new project. Pokud vytvoříte nový projekt vyzkoušet postupy popsané níže, zvolte možnost jazyka C# Azure Cloud Service projektu a vyberte webovou roli a Role pracovního procesu.If you create a new project to try the techniques described below, choose a C# Azure Cloud Service project, and select a Web Role and a Worker Role.

Role Azure projekt cloudové služby

Účely, třeba přidat nějaký kód do projektu, který vyžaduje spoustu času a ukazuje některé zřejmé výkonu problém.For example purposes, add some code to your project that takes a lot of time and demonstrates some obvious performance problem. Například následující kód přidejte projektu role pracovního procesu:For example, add the following code to a worker role project:

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

Volání tento kód v metodě RunAsync v roli pracovního procesu RoleEntryPoint odvozených tříd.Call this code from the RunAsync method in the worker role's RoleEntryPoint-derived class. (Ignorovat varování o metodu běží synchronně.)(Ignore the warning about the method running synchronously.)

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

Sestavení a spuštění cloudové služby místně bez ladění (Ctrl + F5), se konfigurace řešení nastavená na vydání.Build and run your cloud service locally without debugging (Ctrl+F5), with the solution configuration set to Release. Tím se zajistí, že všechny soubory a složky jsou vytvořeny pro spuštění aplikace místně a zajistí, že jsou spuštěné všechny emulátorech.This ensures that all files and folders are created for running the application locally, and ensures that all the emulators are started. Začněte Uživatelském prostředí emulátoru výpočtů z hlavního panelu ověřte, zda je spuštěna vaše role pracovního procesu.Start the Compute Emulator UI from the taskbar to verify that your worker role is running.

2: připojit k procesu2: Attach to a process

Místo profilování aplikace jeho zahájením z integrovaného vývojového prostředí Visual Studio 2010, je nutné připojit profiler ke spuštěnému procesu.Instead of profiling the application by starting it from the Visual Studio 2010 IDE, you must attach the profiler to a running process.

Připojit profiler k procesu, na analyzovat nabídce zvolte Profiler a Attach/Detach.To attach the profiler to a process, on the Analyze menu, choose Profiler and Attach/Detach.

Připojit profile – možnost

Pro roli pracovního procesu vyhledejte proces WaWorkerHost.exe.For a worker role, find the WaWorkerHost.exe process.

WaWorkerHost procesu

Pokud složky vašeho projektu je na síťové jednotce, profiler vás vyzve k zadejte jiné umístění pro uložení sestavy profilování.If your project folder is on a network drive, the profiler will ask you to provide another location to save the profiling reports.

Můžete také připojit k webové roli připojením k WaIISHost.exe.You can also attach to a web role by attaching to WaIISHost.exe. Pokud existuje více procesů role pracovního procesu v aplikaci, budete muset použít processID abychom je odlišili.If there are multiple worker role processes in your application, you need to use the processID to distinguish them. Můžete zadávat dotazy processID prostřednictvím kódu programu pomocí přístupu k objektu Process.You can query the processID programmatically by accessing the Process object. Například pokud přidáte tento kód do metody Run RoleEntryPoint odvozené třídy v roli, najdete v protokolu v uživatelském prostředí emulátoru Compute vědět, jaký proces pro připojení k.For example, if you add this code to the Run method of the RoleEntryPoint-derived class in a role, you can look at the log in the Compute Emulator UI to know what process to connect to.

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

Chcete-li zobrazit v protokolu, spusťte Uživatelském prostředí emulátoru výpočtů.To view the log, start the Compute Emulator UI.

Spustit emulátor služby výpočty uživatelského rozhraní

Otevřete okno konzoly protokol role pracovního procesu v uživatelském prostředí emulátoru Compute po kliknutí na záhlaví okna konzoly.Open the worker role log console window in the Compute Emulator UI by clicking on the console window's title bar. Zobrazí se ID procesu v protokolu.You can see the process ID in the log.

ID procesu zobrazení

Jeden, který jste připojili, proveďte kroky v uživatelském rozhraní aplikace (v případě potřeby) pro reprodukci scénář.One you've attached, perform the steps in your application's UI (if needed) to reproduce the scenario.

Pokud chcete profilaci zastavit, vyberte zastavit profilaci odkaz.When you want to stop profiling, choose the Stop Profiling link.

Zastavit profilování možnost

3: zobrazení sestav výkonu3: View performance reports

Zobrazí se sestava výkonu pro vaši aplikaci.The performance report for your application is displayed.

V tomto okamžiku profiler zastaví provádění, uloží data do souboru .vsp a zobrazí zprávu, která uvádí analýzu těchto dat.At this point, the profiler stops executing, saves data in a .vsp file, and displays a report that shows an analysis of this data.

Profiler sestavy

Pokud se zobrazí String.wstrcpy v horké cesty, klikněte na volbu pouze vlastní kód změnit zobrazení na Zobrazit pouze kód uživatele.If you see String.wstrcpy in the Hot Path, click on Just My Code to change the view to show user code only. Pokud se zobrazí String.Concat, zkuste stisknutím tlačítka Zobrazit veškerý kód.If you see String.Concat, try pressing the Show All Code button.

Byste měli vidět Concatenate metoda a String.Concat zabírá tak velkou část času spuštění.You should see the Concatenate method and String.Concat taking up a large portion of the execution time.

Analýza sestavy

Pokud jste přidali kód pro zřetězení řetězců v tomto článku, měli byste vidět upozornění v seznamu úkolů pro tuto.If you added the string concatenation code in this article, you should see a warning in the Task List for this. Může také zobrazit upozornění, že existuje nadměrné množství uvolněné paměti, což je vzhledem k počtu řetězce, které jsou vytvořeny a odstraněn.You may also see a warning that there is an excessive amount of garbage collection, which is due to the number of strings that are created and disposed.

Upozornění výkonu

4: proveďte změny a porovnání výkonu4: Make changes and compare performance

Můžete také porovnat výkon před a po změně kódu.You can also compare the performance before and after a code change. Zastavení spuštěného procesu a upravit kód nahraďte operace zřetězení řetězců pomocí StringBuilder:Stop the running process, and edit the code to replace the string concatenation operation with the use of 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();
}

Provedení jiný výkon a pak porovnat výkon.Do another performance run, and then compare the performance. V prohlížeči výkonu, pokud spuštění jsou ve stejné relaci, vám stačí vyberte obě sestavy, otevřete místní nabídku a zvolte porovnat sestavy výkonu.In the Performance Explorer, if the runs are in the same session, you can just select both reports, open the shortcut menu, and choose Compare Performance Reports. Pokud chcete k porovnání s spuštěný v jiné relaci výkonu, otevřete analyzovat nabídky a zvolte porovnat sestavy výkonu.If you want to compare with a run in another performance session, open the Analyze menu, and choose Compare Performance Reports. V dialogovém okně, které se zobrazí, zadejte oba soubory.Specify both files in the dialog box that appears.

Porovnat sestavy výkonu – možnost

Sestavy popisují rozdíly mezi dvěma běhy.The reports highlight differences between the two runs.

Sestava porovnání

Blahopřejeme!Congratulations! Začnete s profilerem.You've gotten started with the profiler.

Řešení potížíTroubleshooting

  • Ujistěte se, že provádíte profilaci sestavení pro vydání a spustit bez ladění.Make sure you are profiling a Release build and start without debugging.
  • Pokud v nabídce Profiler není povolena možnost Attach/Detach, spusťte Průvodce výkonem.If the Attach/Detach option is not enabled on the Profiler menu, run the Performance Wizard.
  • Chcete-li zobrazit stav vaší aplikace pomocí Uživatelském prostředí emulátoru výpočtů.Use the Compute Emulator UI to view the status of your application.
  • Pokud máte potíže se spuštěním aplikace v emulátoru nebo připojuje se profiler vypnout emulátor služby výpočty dolů a restartujte ji.If you have problems starting applications in the emulator, or attaching the profiler, shut down the compute emulator and restart it. Pokud se problém nevyřeší, zkuste restartovat.If that doesn't solve the problem, try rebooting. Tomuto problému může dojít, pokud pomocí emulátoru Compute můžete pozastavit a odebrat spuštěné nasazení.This problem can occur if you use the Compute Emulator to suspend and remove running deployments.
  • Pokud jste použili některý z příkazů profilace z příkazového řádku, zejména globální nastavení, ujistěte se, že byla volána VSPerfClrEnv /globaloff a že VsPerfMon.exe byl vypnut.If you have used any of the profiling commands from the command line, especially the global settings, make sure that VSPerfClrEnv /globaloff has been called and that VsPerfMon.exe has been shut down.
  • Pokud při vzorkování, zobrazí se zpráva "PRF0025: Nebyla shromážděna žádná data," Zkontrolujte, jestli jste se připojili k procesu aktivity procesoru.If when sampling, you see the message "PRF0025: No data was collected," check that the process you attached to has CPU activity. Aplikace, které nejsou provádějící všechny výpočetní práce nemusí vracet žádné data vzorkování.Applications that are not doing any computational work might not produce any sampling data. Je také možné, že proces byl ukončen před provedením jakékoli vzorkování.It's also possible that the process exited before any sampling was done. Zkontrolujte, že spuštění metody pro roli, která profilujete neukončí.Check to see that the Run method for a role that you are profiling does not terminate.

Další krokyNext Steps

Instrumentace Azure binárních souborů se spustila v emulátoru není podporován v profileru sady Visual Studio, ale pokud chcete otestovat přidělení paměti, můžete tuto možnost zvolte, pokud profilace.Instrumenting Azure binaries in the emulator is not supported in the Visual Studio profiler, but if you want to test memory allocation, you can choose that option when profiling. Můžete také zvolit profilace souběžnosti, který vám pomůže určit, zda jsou vlákna plýtvání čas soutěží o ceny zámky, nebo profilaci interakce vrstev pomáhá sledovat problémy s výkonem při interakci mezi vrstvami aplikace, které nejvíce často mezi datovou vrstvou a role pracovního procesu.You can also choose concurrency profiling, which helps you determine whether threads are wasting time competing for locks, or tier interaction profiling, which helps you track down performance problems when interacting between tiers of an application, most frequently between the data tier and a worker role. Můžete zobrazit databázové dotazy, které vaše aplikace generuje a profilování údaje použít ke zkvalitnění používání databáze.You can view the database queries that your app generates and use the profiling data to improve your use of the database. Informace o profilování interakce vrstev, najdete v příspěvku blogu návod: použití Profiler interakce vrstvy v aplikaci Visual Studio Team System 2010.For information about tier interaction profiling, see the blog post Walkthrough: Using the Tier Interaction Profiler in Visual Studio Team System 2010.