Profilare le app Web di Azure attive con Application InsightsProfile live Azure web apps with Application Insights

Questa funzionalità di Azure Application Insights è disponibile a livello generale per la funzionalità App Web di Servizio app di Azure e in anteprima per le risorse di calcolo di Azure. Sono disponibili informazioni sull'uso locale di Profiler.This feature of Azure Application Insights is generally available for the Web Apps feature of Azure App Service and is in preview for Azure compute resources. For information regarding on-premises use of profiler.

Questo articolo illustra il tempo impiegato in ogni metodo dell'applicazione Web attiva quando si usa Application Insights.This article discusses the amount of time that's spent in each method of your live web application when you use Application Insights. Lo strumento Application Insights Profiler visualizza i profili dettagliati delle richieste attive che sono state soddisfatte dall'appThe Application Insights Profiler tool displays detailed profiles of live requests that were served by your app. ed evidenzia il percorso critico che impiega più tempo.Profiler highlights the hot path that uses the most time. Le richieste con diversi tempi di risposta vengono profilate in base a un campionamento.Requests with various response times are profiled on a sampling basis. Adottando varie tecniche, è possibile ridurre al minimo il sovraccarico associato all'applicazione.By using a variety of techniques, you can minimize the overhead that's associated with the application.

Lo strumento Profiler è attualmente applicabile alle app Web ASP.NET e ASP.NET Core in esecuzione su App Web.Profiler currently works for ASP.NET and ASP.NET Core web apps that are running on Web Apps. Per usare Profiler è necessario il livello di servizio Basic o superiore.The Basic service tier or higher is required to use Profiler.

Abilitare Profiler per un'app Web in esecuzione su App WebEnable Profiler for your Web Apps web app

Se si è già pubblicata l'applicazione come app Web, ma nel codice sorgente non si è ancora configurato l'uso di Application Insights, eseguire queste operazioni:If you already have the application published to a web app, but have not done anything in the source code to use Application Insights, do the following:

  1. Passare al riquadro Servizi app nel portale di Azure.Go to the App Services pane in the Azure portal.
  2. In Monitoraggio selezionare Application Insights e quindi seguire le istruzioni visualizzate nel riquadro per creare una nuova risorsa o selezionare una risorsa di Application Insights esistente per monitorare l'app Web.Under Monitoring, select Application Insights, and then either follow the instructions on the pane to create a new resource or select an existing Application Insights resource to monitor your web app.

    Abilitare Application Insights nel portale dei servizi app

  3. Se si ha accesso al codice sorgente del progetto, installare Application Insights.If you have access to your project source code, install Application Insights.
    Se è già installato, assicurarsi che la versione in uso sia la più recente.If it's already installed, make sure you have the latest version. Per controllare la versione più recente, in Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet > Aggiornamenti > Aggiorna tutti i pacchetti.To check for the latest version, in Solution Explorer, right-click your project, and then select Manage NuGet packages > Updates > Update all packages. Distribuire quindi l'app.Then, deploy your app.

Per poter interagire con Profiler, le applicazioni ASP.NET Core richiedono l'installazione del pacchetto NuGet Microsoft.ApplicationInsights.AspNetCore 2.1.0-beta6 o versioni successive.ASP.NET Core applications require the installation of the Microsoft.ApplicationInsights.AspNetCore NuGet package 2.1.0-beta6 or later to work with Profiler. A partire dal 27 giugno 2017 le versioni precedenti non sono supportate.As of June 27, 2017, earlier versions are not supported.

  1. Nel portale di Azure aprire la risorsa Application Insights per l'app Web.In the Azure portal, open the Application Insights resource for your web app.
  2. Selezionare Prestazioni > Abilita Application Insights Profiler.Select Performance > Enable Application Insights Profiler.

    Selezionare il banner Abilita profiler

  3. In alternativa è possibile selezionare la configurazione di Profiler per visualizzare lo stato e abilitare o disabilitare Profiler.Alternatively, you can select the Profiler configuration to view the status and enable or disable Profiler.

    Selezionare la configurazione di Profiler

    Le app Web configurate con Application Insights sono elencate nel riquadro di configurazione Profiler.Web apps that are configured with Application Insights are listed in the Profiler configuration pane. Se si sono eseguiti i passaggi precedenti, l'agente Profiler dovrebbe essere installato.If you followed the preceding steps, the Profiler agent should be installed.

  4. Nel riquadro di configurazione Profiler selezionare Abilita profiler.In the Profiler configuration pane, select Enable Profiler.

  5. Se necessario, seguire le istruzioni per installare l'agente Profiler.If necessary, follow the instructions to install the Profiler agent. Se nessuna app Web è stata ancora configurata con Application Insights, selezionare Aggiungi app collegate.If no web apps have been configured with Application Insights, select Add Linked Apps.

    Opzioni del riquadro Configura

A differenza delle app Web ospitate in base ai piani di App Web, le applicazioni ospitate nelle risorse di calcolo di Azure (ad esempio, Macchine virtuali di Azure, set di scalabilità di macchine virtuali, Azure Service Fabric o Servizi cloud di Azure) non sono gestite direttamente da Azure.Unlike web apps that are hosted through Web Apps plans, applications that are hosted in Azure compute resources (for example, Azure Virtual Machines, virtual machine scale sets, Azure Service Fabric, or Azure Cloud Services) are not directly managed by Azure. In questo caso non sono disponibili app Web a cui collegarsi.In this case, there's no web app to link to. Anziché eseguire il collegamento a un'app, selezionare il pulsante Abilita profiler.Instead of linking to an app, select the Enable Profiler button.

Abilitare Profiler per le risorse di calcolo di Azure (anteprima)Enable Profiler for Azure compute resources (preview)

Per altre informazioni, vedere la versione di anteprima di Profiler per le risorse di calcolo di Azure.For information, see the preview version of Profiler for Azure compute resources.

Visualizzare i dati del profilerView profiler data

Verificare che l'applicazione riceva traffico.Make sure your application is receiving traffic. Se si sta eseguendo un esperimento, è possibile generare le richieste da indirizzare all'app Web usando il test delle prestazioni di Application Insights.If you are doing an experiment, you can generate requests to your web app using Application Insights Performance Testing. Se Profiler è stato appena abilitato, è possibile eseguire per circa 15 minuti un breve test di carico, che genererà le analisi del profiler.If you have newly enabled Profiler, you can run a short load test for about 15 minutes, which should generate profiler traces. Se invece Profiler è stato abilitato già da qualche tempo, tenere presente che viene eseguito in modo casuale due volte all'ora e che ogni esecuzione dura due minuti.If you have had Profiler enabled for a while already, keep in mind that Profiler runs randomly two times every hour and for a duration of two minutes each time it runs. È consigliabile eseguire prima il test di carico per un'ora per ottenere tracce di esempio del profiler.We recommend first running the load test for one hour to make sure you get sample profiler traces.

Dopo che l'applicazione ha iniziato a ricevere traffico, passare al riquadro Prestazioni, selezionare Take Actions (Esegui azioni) per visualizzare le analisi del profiler e quindi fare clic sul pulsante Analisi Profiler.After your application receives some traffic, go to the Performance pane, select Take Actions to view profiler traces, and then select the Profiler Traces button.

Anteprima delle analisi di Profiler nel riquadro delle prestazioni di Application Insights

Selezionare un esempio per visualizzare i dettagli a livello di codice del tempo impiegato per l'esecuzione della richiesta.Select a sample to display a code-level breakdown of time spent executing the request.

Explorer di analisi Application Insights

La finestra di esplorazione delle analisi visualizza le informazioni seguenti:The trace explorer displays the following information:

  • Mostra percorso critico: apre il nodo foglia di dimensioni maggiori o almeno un elemento simile.Show Hot Path: Opens the biggest leaf node, or at least something close. Nella maggior parte dei casi questo nodo è adiacente a un collo di bottiglia delle prestazioni.In most cases, this node is adjacent to a performance bottleneck.
  • Etichetta: nome della funzione o dell'evento.Label: The name of the function or event. La struttura mostra una combinazione di codice e di eventi che si sono verificati, ad esempio eventi SQL e HTTP.The tree displays a mix of code and events that occurred (like SQL and HTTP events). L'evento principale rappresenta la durata complessiva della richiesta.The top event represents the overall request duration.
  • Tempo trascorso: l'intervallo di tempo tra l'inizio e la fine dell'operazione.Elapsed: The time interval between the start of the operation and the end of the operation.
  • Quando: tempo in cui la funzione o l'evento è stato eseguito in relazione ad altre funzioni.When: The time when the function or event was running in relation to other functions.

Procedura: leggere i dati sulle prestazioniHow to read performance data

Il profiler del servizio Microsoft usa una combinazione della strumentazione e dei metodi di campionamento per analizzare le prestazioni dell'applicazione.The Microsoft service profiler uses a combination of sampling methods and instrumentation to analyze the performance of your application. Quando la raccolta dettagliata è in corso, il profiler di servizi campiona il puntatore all'istruzione di ogni CPU di computer ogni millisecondo.When detailed collection is in progress, the service profiler samples the instruction pointer of each machine CPU every millisecond. Ogni esempio acquisisce lo stack di chiamate completo del thread attualmente in esecuzione.Each sample captures the complete call stack of the thread that is currently executing. Fornisce informazioni dettagliate sull'attività del thread a livello sia generale che specifico di astrazione.It gives detailed information about what that thread was doing, both at a high level and at a low level of abstraction. Il profiler del servizio raccoglie anche altri eventi per tenere traccia della causalità e della correlazione delle attività, ad esempio gli eventi di commutazione di contesto, Task Parallel Library (TPL) e del pool di thread.The service profiler also collects other events to track activity correlation and causality, including context switching events, Task Parallel Library (TPL) events, and thread pool events.

Lo stack di chiamate riportato nella visualizzazione della sequenza temporale è il risultato del campionamento e della strumentazione.The call stack that's displayed in the timeline view is the result of the sampling and instrumentation. Poiché ogni esempio acquisisce lo stack di chiamate completo del thread, include il codice di Microsoft .NET Framework e di eventuali altri framework a cui si fa riferimento.Because each sample captures the complete call stack of the thread, it includes code from Microsoft .NET Framework, and from other frameworks that you reference.

Allocazione di oggetti (clr!JIT_New o clr!JIT_Newarr1)Object allocation (clr!JIT_New or clr!JIT_Newarr1)

clr!JIT_New e clr!JIT_Newarr1 sono funzioni di supporto in .NET Framework che allocano la memoria da un heap gestito.clr!JIT_New and clr!JIT_Newarr1 are helper functions in the .NET Framework that allocate memory from a managed heap. clr!JIT_New viene richiamato quando si alloca un oggetto.clr!JIT_New is invoked when an object is allocated. clr!JIT_Newarr1 viene richiamato quando si alloca una matrice di oggetti.clr!JIT_Newarr1 is invoked when an object array is allocated. Queste due funzioni sono in genere veloci e richiedono un intervallo temporale relativamente ridotto.These two functions are usually fast and take relatively small amounts of time. Se clr!JIT_New o clr!JIT_Newarr1 impiega molto tempo nella sequenza temporale, è possibile che il codice stia allocando numerosi oggetti e utilizzando una notevole quantità di memoria.If you see clr!JIT_New or clr!JIT_Newarr1 take a substantial amount of time in your timeline, it indicates that the code might be allocating many objects and consuming significant amounts of memory.

Caricamento di codice (clr!ThePreStub)Loading code (clr!ThePreStub)

clr!ThePreStub è una funzione di supporto all'interno di .NET Framework che prepara il codice da eseguire per la prima volta.clr!ThePreStub is a helper function in the .NET Framework that prepares the code to execute for the first time. Ad esempio, include in genere la compilazione JIT.This usually includes, but is not limited to, just-in-time (JIT) compilation. Per ogni metodo C#, clr!ThePreStub deve essere richiamato al massimo una volta nel corso della durata di un processo.For each C# method, clr!ThePreStub should be invoked at most once during the lifetime of a process.

Se clr!ThePreStub richiede una notevole quantità di tempo per una richiesta, indica che la richiesta è la prima a eseguire questo metodo.If clr!ThePreStub takes a substantial amount of time for a request, this indicates that the request is the first one that executes that method. Il tempo di caricamento del primo metodo da parte del runtime di .NET Framework è significativo.The time for the .NET Framework runtime to load the first method is significant. È possibile valutare un processo di riscaldamento che esegua tale parte del codice prima che gli utenti accedano a esso oppure l'esecuzione del generatore di immagini native (ngen.exe) negli assembly.You might consider using a warmup process that executes that portion of the code before your users access it, or consider running Native Image Generator (ngen.exe) on your assemblies.

Conflitto di blocchi (clr!JITutil_MonContention o clr!JITutil_MonEnterWorker)Lock contention (clr!JITutil_MonContention or clr!JITutil_MonEnterWorker)

clr!JITutil_MonContention o clr!JITutil_MonEnterWorker indica che il thread corrente è in attesa di un blocco da rilasciare.clr!JITutil_MonContention or clr!JITutil_MonEnterWorker indicates that the current thread is waiting for a lock to be released. Questo testo viene in genere visualizzato durante l'esecuzione di un'istruzione C# LOCK, quando viene richiamato il metodo Monitor.Enter o un metodo con l'attributo MethodImplOptions.Synchronized.This text is usually displayed when you execute a C# LOCK statement, when invoking the Monitor.Enter method, or when invoking a method with the MethodImplOptions.Synchronized attribute. Il conflitto di blocchi si verifica in genere quando il thread A acquisisce un blocco e il thread B prova ad acquisire lo stesso blocco prima che il thread A lo rilasci.Lock contention usually occurs when thread A acquires a lock, and thread B tries to acquire the same lock before thread A releases it.

Caricamento di codice ([COLD])Loading code ([COLD])

Se il nome del metodo contiene [COLD], ad esempio mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined, il runtime di .NET Framework esegue per la prima volta il codice non ottimizzato dall'ottimizzazione PGO.If the method name contains [COLD], such as mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined, the .NET Framework runtime is executing code for the first time that is not optimized by profile-guided optimization. Per ogni metodo deve essere visualizzato al massimo una volta nel corso del processo.For each method, it should be displayed at most once during the lifetime of the process.

Un tempo sostanziale di caricamento del codice per una richiesta indica che si tratta della prima richiesta che esegue la parte non ottimizzata del metodo.If loading code takes a substantial amount of time for a request, this indicates that the request is the first one to execute the unoptimized portion of the method. Considerare un processo di riscaldamento che esegua tale parte del codice prima che gli utenti accedano a esso.Consider using a warmup process that executes that portion of the code before your users access it.

Inviare una richiesta HTTPSend HTTP request

Metodi come HttpClient.Send indicano che il codice è in attesa del completamento di una richiesta HTTP.Methods like HttpClient.Send indicate that the code is waiting for an HTTP request to be completed.

Operazione di databaseDatabase operation

Metodi come SqlCommand.Execute indicano che il codice è in attesa del completamento di un'operazione di database.Methods like SqlCommand.Execute indicate that the code is waiting for a database operation to finish.

Attesa (AWAIT_TIME)Waiting (AWAIT_TIME)

AWAIT_TIME indica che il codice è in attesa del completamento di un'altra attività.AWAIT_TIME indicates that the code is waiting for another task to finish. Questo in genere accade con l'istruzione C# AWAIT.This usually happens with the C# AWAIT statement. Quando il codice esegue C# AWAIT, il thread viene rimosso e restituisce il controllo al pool di thread e non esiste un thread bloccato in attesa del completamento di AWAIT.When the code does a C# AWAIT, the thread unwinds and returns control to the thread pool, and there is no thread that is blocked waiting for the AWAIT to finish. Tuttavia, in modo logico il thread che ha eseguito AWAIT viene "bloccato" in attesa che venga completata l'operazione.However, logically, the thread that did the AWAIT is "blocked," and is waiting for the operation to finish. L'istruzione AWAIT_TIME indica il tempo di blocco in attesa del completamento dell'attività.The AWAIT_TIME statement indicates the blocked time waiting for the task to finish.

Tempo di bloccoBlocked time

BLOCKED_TIME indica che il codice è in attesa di un'altra risorsa disponibile.BLOCKED_TIME indicates that the code is waiting for another resource to be available. Ad esempio, potrebbe essere in attesa di un oggetto di sincronizzazione, di un thread o del completamento di una richiesta.For example, it might be waiting for a synchronization object, for a thread to be available, or for a request to finish.

Tempo di CPUCPU time

La CPU è occupata nell'esecuzione di istruzioni.The CPU is busy executing the instructions.

Tempo del discoDisk time

L'applicazione sta eseguendo operazioni su disco.The application is performing disk operations.

Tempo di reteNetwork time

L'applicazione sta eseguendo operazioni sulla rete.The application is performing network operations.

Colonna QuandoWhen column

La colonna Quando è una visualizzazione della variazione nel tempo degli esempi INCLUSIVI raccolti per un nodo nel tempo.The When column is a visualization of how the INCLUSIVE samples collected for a node vary over time. L'intervallo totale della richiesta è suddiviso in 32 intervalli di tempo.The total range of the request is divided into 32 time buckets. Gli esempi inclusivi di tale nodo vengono accumulati in questi 32 intervalli.The inclusive samples for that node are accumulated in those 32 buckets. Ogni intervallo è rappresentato come una barra.Each bucket is represented as a bar. L'altezza della barra rappresenta un valore ridimensionato.The height of the bar represents a scaled value. Per i nodi contrassegnati con CPU_TIME o BLOCKED_TIME, oppure in cui è presente una relazione ovvia con l'utilizzo di una risorsa (ad esempio, CPU, disco o thread), la barra rappresenta l'utilizzo di una delle risorse durante tale intervallo.For nodes that are marked CPU_TIME or BLOCKED_TIME, or where there is an obvious relationship to consuming a resource (for example, a CPU, disk, or thread), the bar represents the consumption of one of the resources during the period of that bucket. Se si utilizzano più risorse, per queste metriche è possibile che si ottenga un valore maggiore del 100%.For these metrics, it's possible to get a value of greater than 100 percent by consuming multiple resources. Se ad esempio si usano in media due CPU durante un intervallo, si ottiene il 200%.For example, if you use, on average, two CPUs during an interval, you get 200 percent.

LimitazioniLimitations

Il periodo di conservazione dati predefinito è di cinque giorni.The default data retention period is five days. La quantità massima di dati inseriti giornalmente è 10 GB.The maximum data that's ingested per day is 10 GB.

Non sono previsti costi per l'uso del servizio Profiler,There are no charges for using the Profiler service. ma è necessario che l'app Web sia ospitata almeno al livello Basic di App Web.For you to use the Profiler service, your web app must be hosted in at least the Basic tier of Web Apps.

Overhead e algoritmo di campionamentoOverhead and sampling algorithm

Profiler viene eseguito in modo casuale per due minuti ogni ora in ogni macchina virtuale che ospita l'applicazione con Profiler abilitato per acquisire le analisi.Profiler randomly runs two minutes every hour on each virtual machine that hosts the application that has Profiler enabled for capturing traces. Quando è in esecuzione, Profiler comporta un sovraccarico della CPU del server compreso tra il 5% e il 15%.When Profiler is running, it adds from 5 percent to 15 percent CPU overhead to the server.

Maggiore è il numero di server disponibili per l'hosting dell'applicazione, minore è l'impatto di Profiler sulle prestazioni complessive dell'applicazione.The more servers that are available for hosting the application, the less impact Profiler has on the overall application performance. Ciò dipende dall'algoritmo di campionamento, in base al quale Profiler viene eseguito in qualsiasi momento solo nel 5% dei server.This is because the sampling algorithm results in Profiler running on only 5 percent of servers at any time. Sono disponibili più server per elaborare le richieste Web e compensare il sovraccarico del server causato dall'esecuzione di Profiler.More servers are available to serve web requests to offset the server overhead caused by running Profiler.

Disabilitare ProfilerDisable Profiler

Per arrestare o riavviare Profiler per una singola istanza di App Web, in Processi Web accedere alla risorsa di App Web.To stop or restart Profiler for an individual web apps instance, under Web Jobs, go to the Web Apps resource. Per eliminare Profiler, passare a Estensioni.To delete Profiler, go to Extensions.

Disabilitare Profiler per un processo Web

È consigliabile abilitare Profiler su tutte le app Web per individuare il prima possibile eventuali problemi di prestazioni.We recommend that you have Profiler enabled on all your web apps to discover any performance issues as early as possible.

Se si usa Distribuzione Web per distribuire le modifiche all'applicazione Web, assicurarsi di escludere la cartella App_Data dall'eliminazione durante la distribuzione.If you use WebDeploy to deploy changes to your web application, ensure that you exclude the App_Data folder from being deleted during deployment. In caso contrario, i file dell'estensione Profiler verranno eliminati alla successiva distribuzione dell'applicazione Web in Azure.Otherwise, the Profiler extension's files are deleted the next time you deploy the web application to Azure.

Risoluzione dei problemiTroubleshooting

Troppe sessioni di profilatura attiveToo many active profiling sessions

È attualmente possibile abilitare Profiler su un massimo di quattro app Web e slot di distribuzione di Azure in esecuzione nello stesso piano di servizio.Currently, you can enable Profiler on a maximum of four Azure web apps and deployment slots that are running in the same service plan. Se il processo Web di Profiler segnala un numero eccessivo di sessioni di profilatura attive, spostare alcune app Web in un altro piano di servizio.If the Profiler web job is reporting too many active profiling sessions, move some web apps to a different service plan.

Come è possibile verificare se il Application Insights Profiler è in esecuzione?How do I determine whether Application Insights Profiler is running?

Profiler viene eseguito come processo Web continuo nell'app Web.Profiler runs as a continuous web job in the web app. È possibile aprire la risorsa dell'app Web nel portale di Azure.You can open the web app resource in the Azure portal. Nel riquadro WebJobs controllare lo stato di ApplicationInsightsProfiler.In the WebJobs pane, check the status of ApplicationInsightsProfiler. Se non è in esecuzione, aprire Log per altre informazioni.If it isn't running, open Logs to get more information.

Perché non è possibile trovare esempi di stack anche se Profiler è in esecuzione?Why can't I find any stack examples, even though Profiler is running?

Ecco alcuni aspetti da controllare:Here are a few things that you can check:

  • Verificare che il piano di servizio dell'app Web sia di livello Basic o superiore.Make sure that your web app service plan is Basic tier or higher.
  • Assicurarsi che nell'app Web sia abilitato Application Insights SDK 2.2 Beta o versioni successive.Make sure that your web app has Application Insights SDK 2.2 Beta or later enabled.
  • Assicurarsi che nell'app Web l'impostazione APPINSIGHTS_INSTRUMENTATIONKEY abbia la stessa chiave di strumentazione usata da Application Insights SDK.Make sure that your web app has the APPINSIGHTS_INSTRUMENTATIONKEY setting configured with the same instrumentation key that's used by the Application Insights SDK.
  • Assicurarsi che l'app Web sia in esecuzione su .NET Framework 4.6.Make sure that your web app is running on .NET Framework 4.6.
  • Se l'app Web è un'applicazione ASP.NET Core, verificare le dipendenze richieste.If your web app is an ASP.NET Core application, check the required dependencies.

Dopo l'avvio di Profiler, è previsto un breve periodo di riscaldamento durante il quale Profiler raccoglie attivamente diverse analisi delle prestazioni.After Profiler is started, there is a short warmup period during which Profiler actively collects several performance traces. Al termine di questo periodo, Profiler raccoglie le analisi delle prestazioni per due minuti ogni ora.After that, Profiler collects performance traces for two minutes every hour.

Prima era attivo il profiler di servizi Azure.I was using Azure Service profiler. Che cosa è successo?What happened to it?

Quando si abilita Application Insights Profiler, l'agente del profiler di servizi Azure viene disabilitato.When you enable Application Insights Profiler, the Azure Service profiler agent is disabled.

Doppio conteggio dei thread in paralleloDouble counting in parallel threads

In alcuni casi la metrica del tempo totale nel visualizzatore dello stack supera la durata della richiesta.In some cases, the total time metric in the stack viewer is more than the duration of the request.

Questa situazione può verificarsi quando due o più thread sono associati a una richiesta e operano in parallelo.This situation might occur when two or more threads are associated with a request, and they are operating in parallel. In questo caso, il tempo totale di thread è superiore al tempo trascorso.In that case, the total thread time is more than the elapsed time. Un thread può essere in attesa del completamento dell'altro.One thread might be waiting on the other to be completed. Il visualizzatore prova a rilevare questa situazione e omette l'attesa non interessante, ma sbaglia mostrando troppe informazioni anziché omettere le informazioni potenzialmente critiche.The viewer tries to detect this and omits the uninteresting wait, but it errs on the side of displaying too much information rather than omit what might be critical information.

Quando sono presenti thread in parallelo nelle analisi, determinare quali thread sono in attesa per poter verificare il percorso critico per la richiesta.When you see parallel threads in your traces, determine which threads are waiting so you can ascertain the critical path for the request. Nella maggior parte dei casi, il thread che entra rapidamente in uno stato di attesa è semplicemente in attesa di altri thread.In most cases, the thread that quickly goes into a wait state is simply waiting on the other threads. Concentrarsi sugli altri thread e ignorare il tempo nei thread in attesa.Concentrate on the other threads, and ignore the time in the waiting threads.

Senza dati di profilaturaNo profiling data

Ecco alcuni aspetti da controllare:Here are a few things that you can check:

  • Se i dati che si sta tentando di visualizzare sono antecedenti a un paio di settimane, è possibile limitare il filtro temporale e riprovare.If the data you are trying to view is older than a couple of weeks, try limiting your time filter and try again.
  • Verificare che un firewall o i proxy non abbiano bloccato l'accesso a https://gateway.azureserviceprofiler.net.Ensure that proxies or a firewall have not blocked access to https://gateway.azureserviceprofiler.net.
  • Verificare che la chiave di strumentazione di Application Insights in uso nell'app sia la stessa della risorsa di Application Insights usata per abilitare la profilatura.Ensure that the Application Insights instrumentation key you are using in your app is the same as the Application Insights resource that you used to enabled profiling. La chiave si trova in genere nel file ApplicationInsights.config, ma può anche essere definita nel file web.config o app.config.The key is usually in the ApplicationInsights.config file, but it might also be in the web.config or app.config file.

Report di errori nel visualizzatore di profilaturaError report in the profiling viewer

Inviare un ticket di supporto nel portale.Submit a support ticket in the portal. Verificare di includere l'ID di correlazione dal messaggio di errore.Be sure to include the correlation ID from the error message.

Errore di distribuzione: Directory non vuota 'D:\home\site\wwwroot\App_Data\jobs'Deployment error: Directory Not Empty 'D:\home\site\wwwroot\App_Data\jobs'

Se si intende ridistribuire l'app Web in una risorsa di App Web con Profiler abilitato, è possibile che venga visualizzato un messaggio simile al seguente:If you are redeploying your web app to a Web Apps resource with Profiler enabled, you might see a message like the following:

Directory non vuota 'D:\home\site\wwwroot\App_Data\jobs'Directory Not Empty 'D:\home\site\wwwroot\App_Data\jobs'

Questo errore si verifica se si esegue Distribuzione Web da script o dalla pipeline di distribuzione di Visual Studio Team Services.This error occurs if you run Web Deploy from scripts or from the Visual Studio Team Services Deployment Pipeline. Per risolvere questo problema, aggiungere i parametri di distribuzione seguenti all'attività Distribuzione Web:The solution is to add the following additional deployment parameters to the Web Deploy task:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

Questi parametri eliminano la cartella usata da Application Insights Profiler e sbloccano il processo di ridistribuzione.These parameters delete the folder that's used by Application Insights Profiler and unblock the redeploy process. Non influiscono sull'istanza di Profiler attualmente in esecuzione.They don't affect the Profiler instance that's currently running.

Installazione manualeManual installation

Quando si configura Profiler, vengono apportati alcuni aggiornamenti alle impostazioni dell'app Web.When you configure Profiler, updates are made to the web app's settings. È possibile applicare gli aggiornamenti manualmente, se l'ambiente lo richiedeYou can apply the updates manually if your environment requires it. Ad esempio nel caso in cui l'applicazione sia in esecuzione in un ambiente di App Web per PowerApps.An example might be that your application is running in a Web Apps environment for PowerApps.

  1. Nel riquadro Web App Control (Controllo app Web) aprire Impostazioni.In the Web App Control pane, open Settings.
  2. Impostare la versione di .NET Framework su v4.6.Set .Net Framework version to v4.6.
  3. Attivare Always On.Set Always On to On.
  4. Aggiungere l'impostazione dell'app APPINSIGHTS_INSTRUMENTATIONKEY e impostare il valore sulla stessa chiave di strumentazione usata dall'SDK.Add the APPINSIGHTS_INSTRUMENTATIONKEY app setting, and set the value to the same instrumentation key that's used by the SDK.
  5. Aprire Strumenti avanzati.Open Advanced Tools.
  6. Selezionare Vai per aprire il sito Web Kudu.Select Go to open the Kudu website.
  7. Nel sito Web Kudu selezionare Site extensions (Estensioni del sito).On the Kudu website, select Site extensions.
  8. Installare Application Insights dalla raccolta delle app Web di Azure.Install Application Insights from the Azure Web Apps Gallery.
  9. Riavviare l'app Web .Restart the web app.

Attivare Profiler manualmenteManually trigger Profiler

Durante lo sviluppo di Profiler è stata aggiunta un'interfaccia della riga di comando per testare Profiler sui servizi app.When we developed Profiler, we added a command-line interface so that we could test Profiler on app services. Usando questa interfaccia, gli utenti possono anche personalizzare la modalità di avvio di Profiler.By using this same interface, users can also customize how Profiler starts. A livello generale, Profiler usa il sistema Kudu di App Web per gestire la profilatura in background.At a high level, Profiler uses the Web Apps Kudu System to manage profiling in the background. Quando si installa l'estensione Application Insights, viene creato un processo Web continuo che ospita Profiler.When you install the Application Insights Extension, we create a continuous web job that hosts Profiler. Questa stessa tecnologia viene usata per creare un nuovo processo Web che può essere personalizzato in base alle esigenze.We use this same technology to create a new web job that you can customize to fit your needs.

Questa sezione illustra come eseguire queste operazioni:This section explains how to:

  • Creare un processo Web che consente di avviare Profiler per due minuti con un semplice clic.Create a web job, which can start Profiler for two minutes with the press of a button.
  • Creare un processo Web che consente di pianificare l'esecuzione di Profiler.Create a web job, which can schedule Profiler to run.
  • Impostare gli argomenti per Profiler.Set arguments for Profiler.

ConfigurareSet up

Prima di tutto è opportuno acquisire familiarità con il dashboard del processo Web.First, familiarize yourself with the web job's dashboard. In Impostazioni fare clic sulla scheda Processi Web.Under Settings, select the WebJobs tab.

Pannello Processi Web

Come si può notare, questo dashboard visualizza tutti i processi Web attualmente installati nel sito.As you can see, this dashboard displays all the web jobs that are currently installed on your site. È possibile vedere il processo Web ApplicationInsightsProfiler2 su cui è in esecuzione il processo di Profiler.You can see the ApplicationInsightsProfiler2 web job, which has the Profiler job running. È qui che si creano nuovi processi Web per la profilatura manuale e pianificata.This is where we create new web jobs for manual and scheduled profiling.

Per ottenere i file binari necessari, eseguire queste operazioni:To get the binaries you need, do the following:

  1. Sul sito Kudu, nella scheda Development tools (Strumenti di sviluppo), selezionare la scheda Advanced Tools (Strumenti avanzati) con il logo Kudu e quindi scegliere Go (Vai).On the Kudu site, on the Development tools tab, select the Advanced Tools tab with the Kudu logo, and then select Go.
    Verrà aperto un nuovo sito a cui si accede automaticamente.A new site opens, and you are signed in automatically.
  2. Per scaricare i file binari di Profiler, accedere a Esplora file tramite Console di debug > CMD nella parte superiore della pagina.To download the Profiler binaries, go to File Explorer via Debug Console > CMD, which is located at the top of the page.
  3. Selezionare Site > wwwroot > App_Data > Jobs > Continuous.Select Site > wwwroot > App_Data > Jobs > Continuous.
    Verrà visualizzata una cartella denominata ApplicationInsightsProfiler2.You should see a folder named ApplicationInsightsProfiler2.
  4. A sinistra della cartella fare clic sull'icona Download.At the left of the folder, select the Download icon.
    Verrà scaricato il file ApplicationInsightsProfiler2.zip.This action downloads the ApplicationInsightsProfiler2.zip file. È consigliabile creare una directory vuota in cui spostare questo archivio con estensione zip.We recommend that you create a clean directory to move this zip archive to.

Configurazione di un archivio di processi WebSetting up the web job archive

Quando si aggiunge un nuovo processo Web nel sito Web di Azure, sostanzialmente si crea un archivio con estensione zip che contiene un file run.cmd.When you add a new web job to the Azure website, you essentially create a zip archive with a run.cmd file inside. Il file run.cmd indica le operazioni da svolgere durante l'esecuzione del processo Web.The run.cmd file tells the web job system what to do when you run the web job.

  1. Creare una nuova cartella, ad esempio RunProfiler2Minutes.Create a new folder (for example, RunProfiler2Minutes).
  2. Copiare i file dalla cartella ApplicationInsightProfiler2 estratta alla nuova cartella.Copy the files from the extracted ApplicationInsightProfiler2 folder into this new folder.
  3. Creare un nuovo file run.cmd.Create a new run.cmd file.
    Per praticità, è possibile aprire la cartella di lavoro in Visual Studio Code prima di iniziare.For convenience, you can open the working folder in Visual Studio Code before you start.
  4. Nel file aggiungere il comando ApplicationInsightsProfiler.exe start --engine-mode immediate --single --immediate-profiling-duration 120.In the file, add the command ApplicationInsightsProfiler.exe start --engine-mode immediate --single --immediate-profiling-duration 120. Di seguito sono riportate le descrizioni dei comandi:The commands are described as follows:

    • start: avvia Profiler.start: Tells Profiler to start.
    • --engine-mode immediate: indica a Profiler di iniziare subito la profilatura.--engine-mode immediate: Tells Profiler to begin profiling immediately.
    • --single indica a Profiler di eseguire la profilatura e quindi arrestarsi automaticamente.--single: Tells Profiler to run and then stop automatically.
    • --immediate-profiling-duration 120: indica a Profiler di eseguire la profilatura per 120 secondi o 2 minuti.--immediate-profiling-duration 120: Tells Profiler to run for 120 seconds, or 2 minutes.
  5. Salvare le modifiche.Save your changes.

  6. Archiviare la cartella facendo clic con il pulsante destro del mouse e quindi scegliendo Invia a > Cartella compressa.Archive the folder by right-clicking it and then selecting Send to > Compressed (zipped) folder.
    Verrà creato un file con l'estensione zip e il nome della cartella.This action creates a .zip file that uses the name of your folder.

Comando di avvio di Profiler

A questo punto si è creato un file con estensione zip che è possibile usare per configurare i processi Web nel sito.You have now created a web job .zip file, which you can use to set up web jobs in your site.

Aggiungere un nuovo processo WebAdd a new web job

In questa sezione si aggiunge un nuovo processo Web nel sito.In this section, you add a new web job on your site. L'esempio seguente mostra come aggiungere un processo Web attivato manualmente.The following example shows how to add a manually triggered web job. La procedura per eseguire questa operazione è quasi identica a quella relativa a un processo Web pianificato.After you've added the manually triggered web job, the process is nearly the same for a scheduled web job.

  1. Passare al dashboard Processi Web.Go to the Web jobs dashboard.
  2. Sulla barra degli strumenti fare clic su Aggiungi.On the toolbar, select Add.
  3. Assegnare al processo Web un nome.Give your web job a name.
    Per maggiore chiarezza, può essere utile usare lo stesso nome dell'archivio ed estenderlo per diverse versioni del file run.cmd.For clarity, it can help to match the name of your archive and to open it up for a variety of versions of the run.cmd file.
  4. Nell'area Caricamento file del modulo selezionare l'icona Apri file e quindi cercare il file con estensione zip creato nella sezione precedente.In the File upload area of the form, select the Open file icon, and then search for the .zip file that you created in the preceding section.

    a.a. Nella casella Tipo selezionare Attivato.In the Type box, select Triggered.
    b.b. Nella casella Trigger selezionare Manuale.In the Triggers box, select Manual.

  5. Selezionare OK.Select OK.

Comando di avvio di Profiler

Eseguire ProfilerRun Profiler

Ora che si è creato un nuovo processo Web attivabile manualmente, è possibile provare a eseguirlo seguendo le istruzioni riportate in questa sezione.Now that you have a new web job that you can trigger manually, you can try to run it by following the instructions in this section.

Per impostazione predefinita, è possibile eseguire un solo processo ApplicationInsightsProfiler.exe alla volta su un computer in qualsiasi momento.By design, you can have only one ApplicationInsightsProfiler.exe process running on a machine at any given time. Per iniziare, assicurarsi quindi di disabilitare il processo Web Continuous da questo dashboard.So, before you begin, disable the Continuous web job from this dashboard.

  1. Selezionare la riga con il nuovo processo Web e quindi scegliere Arresta.Select the row with the new web job, and then select Stop.
  2. Sulla barra degli strumenti fare clic su Aggiorna e verificare che il processo risulti arrestato.On the toolbar, select Refresh, and confirm that the status indicates that the job is stopped.
  3. Selezionare la riga con il nuovo processo Web e quindi scegliere Esegui.Select the row with the new web job, and then select Run.
  4. Con la riga ancora selezionata, sulla barra degli strumenti fare clic sul comando Log.With the row still selected, on the toolbar, select the Logs command.
    Questa operazione consente di aprire un dashboard per il nuovo processo Web ed elenca le esecuzioni più recenti e i relativi risultati.This action opens a web jobs dashboard for the new web job, and it lists the most recent runs and their results.
  5. Selezionare l'istanza dell'esecuzione appena avviata.Select the instance of the run you've just started.
    Se il nuovo processo Web è stato avviato correttamente, è possibile visualizzare alcuni log di diagnostica provenienti da Profiler che confermano l'avvio della profilatura.If you've successfully triggered the new web job, you can view some diagnostic logs coming from Profiler that confirm that the profiling has started.

Aspetti da considerareThings to consider

Questo metodo è relativamente semplice, ma è opportuno considerare gli aspetti seguenti:Though this method is relatively straightforward, consider the following:

  • Poiché il processo Web non è gestito dal servizio Microsoft, non è possibile aggiornare i file binari dell'agente per il processo Web.Because your web job is not managed by our service, we have no way to update the agent binaries for your web job. Non è attualmente disponibile una pagina di download stabile per i file binari, quindi l'unico modo per ottenere la versione più recente di tali file è aggiornare l'estensione e recuperarla dalla cartella Continuous, come nei passaggi precedenti.We do not currently have a stable download page for our binaries, so the only way to get the latest binaries is by updating your extension and grabbing it from the Continuous folder as you did in the previous steps.

  • Poiché questo processo prevede l'utilizzo di argomenti della riga di comando originariamente concepiti per gli sviluppatori anziché per gli utenti finali, gli argomenti potrebbero cambiare in futuro.Because this process utilizes command-line arguments that were originally designed for developers rather than end-users, the arguments might change in the future. Prestare attenzione alle possibili modifiche quando si esegue l'aggiornamento.Be aware of possible changes when you upgrade. Questo non dovrebbe comunque causare particolari problemi perché è possibile aggiungere un processo Web, eseguirlo e testarlo per verificare che funzioni.It shouldn't be much of a problem, because you can add a web job, run it, and test to ensure that it works. In futuro verrà sviluppata un'interfaccia utente per gestire questa operazione evitando la procedura manuale.Eventually, we will build a UI to handle this without the manual process.

  • Processi Web di App Web è un'ottima funzionalità.The Web Jobs feature of Web Apps is unique. Quando esegue il processo Web, verifica che il processo abbia le stesse variabili di ambiente e le stesse impostazioni di app previste per il sito Web.When it runs the web job, it ensures that your process has the same environment variables and app settings that your website will have. Non è quindi necessario passare la chiave di strumentazione a Profiler tramite la riga di comando.This means that you do not need to pass the instrumentation key through the command line to Profiler. Profiler dovrebbe selezionare automaticamente la chiave di strumentazione dall'ambiente.Profiler should pick up the instrumentation key from the environment. Se tuttavia si vuole eseguire Profiler nella casella di sviluppo o in un computer all'esterno di App Web, è necessario specificare una chiave di strumentazione.However, if you want to run Profiler on your dev box or on a machine outside of Web Apps, you need to supply an instrumentation key. È possibile eseguire questa operazione passando un argomento, --ikey <instrumentation-key>.You can do so by passing an argument, --ikey <instrumentation-key>. Questo valore deve corrispondere alla chiave di strumentazione usata dall'applicazione.This value must match the instrumentation key that your application is using. Nell'output del log di Profiler è indicata la chiave di strumentazione iniziale di Profiler ed è specificato se sono state rilevate attività da tale chiave di strumentazione durante la profilatura.The log output from Profiler tells you which ikey Profiler started with and whether we detected activity from that instrumentation key while we were profiling.

  • I processi Web con attivazione manuale possono essere attivati tramite webhook.Manually triggered web jobs can be triggered via Web Hook. È possibile ottenere questo URL facendo clic con il pulsante destro del mouse sul processo Web nel dashboard e visualizzando le proprietà.You can get this URL by right-clicking the web job on the dashboard and viewing the properties. In alternativa, è possibile selezionare Proprietà sulla barra degli strumenti dopo aver selezionato il processo Web nella tabella.Or, in the toolbar, you can select Properties after you select the web job in the table. Questo approccio offre infinite possibilità, dall'attivazione di Profiler dalla pipeline di integrazione continua/recapito continuo (come VSTS) all'uso di un servizio come Microsoft Flow (https://flow.microsoft.com/en-us/)).This approach opens up endless possibilities, such as triggering Profiler from your CI/CD pipeline (like VSTS) or something like Microsoft Flow (https://flow.microsoft.com/en-us/). In ultima analisi, la scelta dipende dal livello di complessità desiderato per il file run.cmd (che può essere anche un file run.ps1), ma la flessibilità è garantita.Ultimately, your choice depends on how complex you want to make your run.cmd file (which can also be a run.ps1 file), but the flexibility is there.

Passaggi successiviNext steps