Risoluzione dei problemi di rallentamento delle prestazioni delle app nel Servizio app di Azure
Questo articolo fornisce informazioni utili per la risoluzione dei rallentamenti delle prestazioni delle app nel Servizio app di Azure.
Se si ha bisogno di ulteriore aiuto in qualsiasi punto di questo articolo, è possibile contattare gli esperti di Azure sui forum MSDN Azure e Stack Overflow. In alternativa, è possibile anche inviare un caso di supporto Azure. Passare al sito di supporto per Azure e fare clic su Ottenere supporto.
Sintomo
Quando si esplora l'app, le pagine vengono caricate lentamente e a volte si verifica il timeout.
Causa
Spesso la causa dell'errore deriva da problemi a livello dell'applicazione, ad esempio:
- le richieste di rete impiegano troppo tempo
- il codice dell'applicazione o le query di database non sono efficienti
- utilizzo elevato di memoria/CPU da parte dell'applicazione
- arresto anomalo dell'applicazione a causa di un'eccezione
Passaggi per la risoluzione dei problemi
La risoluzione dei problemi prevede tre attività distinte, in ordine sequenziale:
Il servizio app presenta diverse opzioni per ogni passaggio.
1. Osservare e monitorare il comportamento dell'applicazione
Tenere traccia dell'integrità del servizio
Microsoft Azure pubblica un annuncio ogni volta che si verifica un'interruzione del servizio o una riduzione delle prestazioni. È possibile verificare l'integrità del servizio nel portale di Azure. Per altre informazioni, vedere Tenere traccia dell’integrità del servizio.
Monitorare l'app
Questa opzione consente di trovare eventuali problemi nell'applicazione. Nel pannello dell'app fare clic sul riquadro Richieste ed errori. Il pannello Metrica mostra tutte le metriche che si possono aggiungere.
Le metriche più comunemente monitorate per le app sono
- Working set della memoria medio
- Ora di risposta
- Tempo CPU
- Working set della memoria
- Richieste
Per altre informazioni, vedi:
Monitorare lo stato degli endpoint
Se si esegue l'app nel piano tariffario Standard, il servizio app consente di monitorare due endpoint da tre località geografiche.
Il monitoraggio degli endpoint configura i test Web da posizioni distribuite a livello geografico che testano il tempo di risposta e di attività degli URL Web. Il test esegue un'operazione HTTP GET sull'URL Web per determinare il tempo di risposta e di attività da ogni posizione. Ogni posizione configurata esegue un testo ogni cinque minuti.
Il tempo di attività viene monitorato mediante codici di risposta HTTP e il tempo di risposta è misurato in millisecondi. Un test di monitoraggio ha esito negativo se il codice della risposta HTTP è maggiore di o uguale a 400 o se la risposta richiede più di 30 secondi. Un endpoint è considerato disponibile se il test di monitoraggio ha esito positivo da tutte le posizioni specificate.
Per configurarlo, vedere Eseguire il monitoraggio delle app nel servizio app di Azure.
Per altre informazioni sul monitoraggio degli endpoint, vedere anche il video che illustra come mantenere attivi i siti Web di Azure e monitorare gli endpoint con Stefan Schackow .
Monitoraggio delle prestazioni dell'applicazione usando le estensioni
È anche possibile monitorare le prestazioni dell'applicazione usando un'estensione del sito.
Ogni app del servizio app fornisce un endpoint di gestione estensibile che consente di usare un set avanzato di strumenti distribuiti come estensioni del sito. Le estensioni includono:
- Editor di codice sorgente come Azure DevOps.
- Strumenti di gestione per le risorse connesse, ad esempio un database MySQL connesso a un'app.
Azure Application Insights è un'altra estensione del sito disponibile per il monitoraggio delle prestazioni. Per usare Application Insights è necessario ricompilare il codice con un SDK. È anche possibile installare un'estensione che consente l'accesso a dati aggiuntivi. SDK consente di scrivere il codice per monitorare l'utilizzo e prestazioni dell'applicazione in modo più dettagliato. Per altre informazioni, vedere Monitorare le prestazioni di applicazioni Web.
2. Raccogliere i dati
Il servizio app offre funzionalità diagnostiche per la registrazione di informazioni sia dal server Web sia dall'applicazione Web, separate in diagnostica del server Web e diagnostica delle applicazioni.
Abilitare la diagnostica del server Web
È possibile abilitare o disabilitare i seguenti tipi di log:
- Registrazione degli errori dettagliata: consente di registrare informazioni dettagliate sugli errori relativi ai codici di stato HTTP che indicano un'operazione non riuscita (codice di stato 400 o superiore), incluse eventualmente le informazioni che aiutano a determinare il motivo per cui il server ha restituito il codice di errore.
- Traccia delle richieste non riuscita : consente di registrare informazioni dettagliate sulle richieste non riuscite, inclusa una traccia dei componenti IIS utilizzati per elaborare la richieste e il tempo impiegato in ciascun componente. Ciò può essere utile se si sta provando a migliorare le prestazioni delle app o a isolare la causa di un errore HTTP specifico.
- Registrazione del server Web : consente di registrare informazioni sulle transazioni HTTP tramite il formato di file di log esteso W3C. Ciò è utile nel determinare le metriche generali dell'app, ad esempio il numero delle richieste gestite oppure quante di esse provengono da uno specifico indirizzo IP.
Abilitare la diagnostica delle applicazioni
Esistono diverse opzioni per raccogliere dati sulle prestazioni dell'applicazione dal servizio app, profilare l'applicazione in tempo reale da Visual Studio oppure modificare il codice dell'applicazione per registrare altre informazioni e tracce. È possibile scegliere le opzioni in base al livello di accesso consentito all'applicazione e ai dati osservati tramite gli strumenti di monitoraggio.
Usare Application Insights Profiler
È possibile abilitare Application Insights Profiler per avviare l'acquisizione di tracce dettagliate delle prestazioni. È possibile accedere alle tracce acquisite fino a cinque giorni prima, quando occorre analizzare i problemi che si sono verificati in passato. È possibile scegliere questa opzione, a condizione che sia disponibile l'accesso alla risorsa Application Insights dell'app nel portale di Azure.
Application Insights Profiler offre statistiche sui tempi di risposta per ogni chiamata Web e tracce che indicano la riga del codice che ha causato risposte lente. In alcuni casi l'app del servizio app è lenta perché una parte del codice non scritta in modo efficiente. È possibile ad esempio che siano presenti un codice sequenziale che può essere eseguito in parallelo e conflitti di blocco di database non previsti. La rimozione di questi colli di bottiglia nel codice migliora le prestazioni dell'app. Questi colli di bottiglia tuttavia risultano difficili da rilevare se non vengono configurati tracce e log elaborati. Le tracce raccolte da Application Insights Profiler sono utili per identificare le righe di codice che rallentano l'applicazione e consentono di risolvere questa problematica per le app del servizio app.
Per altre informazioni, vedere Profilare le app attive in Servizio app di Azure con Application Insights.
Usare la profilatura remota
Nel Servizio app di Azure è possibile profilare in modalità remota app Web, app per le API, back-end per dispositivi mobili e processi Web. Scegliere questa opzione se si ha accesso alla risorsa app e si sa come riprodurre il problema o se si conosce l'intervallo di tempo esatto in cui si verifica il problema di prestazioni.
La profilatura remota è utile se l'utilizzo della CPU da parte del processo è elevato e l'esecuzione del processo è più lenta del previsto o se la latenza delle richieste HTTP è superiore al normale. In questi casi è possibile profilare il processo in modalità remota e ottenere campioni di stack di chiamate della CPU per analizzare l'attività del processo e i percorsi critici del codice.
Per altre informazioni, vedere Remote Profiling support in Azure App Service (Supporto della profilatura remota in Servizio app di Azure).
Configurare manualmente le tracce di diagnostica
Se si ha accesso al codice sorgente dell'applicazione Web, la diagnostica delle applicazioni consente di acquisire le informazioni prodotte da un'applicazione Web. Le applicazioni ASP.NET possono usare la classe System.Diagnostics.Trace
per registrare le informazioni nel log di diagnostica applicazioni. È tuttavia necessario modificare il codice o ridistribuire l'applicazione. Questo metodo è consigliato se l'app è in esecuzione in un ambiente di testing.
Per istruzioni dettagliate su come configurare l'applicazione per la registrazione, vedere Abilitare la registrazione diagnostica per le app nel Servizio app di Azure.
Usare lo strumento di diagnostica
Il servizio app offre un'esperienza dinamica e interattiva che consente di risolvere i problemi delle app senza ricorrere ad alcun intervento di configurazione. Quando vengono rilevati problemi nell'app, lo strumento di diagnostica ne evidenzia la natura per poter semplificare e velocizzare l'individuazione e la risoluzione del problema.
Per accedere alla diagnostica del servizio app, passare alla app del servizio app o all'ambiente del servizio app nel portale di Azure. Nel riquadro di spostamento a sinistra fare clic su Diagnostica e risoluzione dei problemi.
Usare la console di debug Kudu
Il servizio app include una console di debug che è possibile usare per il debug, l'esplorazione e il caricamento di file, nonché endpoint JSON per ottenere informazioni sull'ambiente in uso. Questa console è chiamata console Kudu o dashboard SCM dell'app.
È possibile accedere a questo dashboard selezionando il collegamento https://<nome app>.scm.azurewebsites.net/.
Elementi forniti dalla console Kudu:
- impostazioni di ambiente per l'applicazione
- log in streaming
- dump di diagnostica
- console di debug in cui è possibile eseguire cmdlet di PowerShell e comandi DOS di base.
Inoltre, nel caso in cui l'applicazione generi eccezioni first-chance, è possibile usare Kudu e l'utilità della riga di comando Procdump dello strumento SysInternals per creare dump della memoria. I dump della memoria sono snapshot del processo e semplificano la risoluzione di problemi più complessi riscontrati nell'app.
Per altre informazioni sulle funzionalità disponibili in Kudu, vedere gli strumenti DevOps che è opportuno conoscere.
3. Attenuare il problema
Ridimensionare l'app
Nel servizio app di Azure, per ottimizzare le prestazioni e la velocità effettiva è possibile modificare la scalabilità in cui è in esecuzione l'applicazione. Aumentare le prestazioni di un'app implica due azioni correlate: passare a un piano tariffario superiore e configurare determinate impostazioni una volta adottato il nuovo piano.
Per altre informazioni sul ridimensionamento, vedere Ridimensionare un'app nel Servizio app di Azure.
È anche possibile scegliere di eseguire l'applicazione in più di un'istanza. La scalabilità orizzontale non consente solo di ottenere una maggiore capacità di elaborazione, ma anche di usufruire di un certo livello di tolleranza di errore. Se il processo si arresta in un'istanza, le altre istanze continuano a gestire le richieste.
È possibile impostare il ridimensionamento manuale o automatico.
Usare la funzionalità AutoHeal
La funzionalità AutoHeal consente di riciclare il processo di lavoro per l'app in base alle impostazioni specificate, ad esempio modifiche di configurazione, richieste, limiti basati sulla memoria o il tempo necessario per l'esecuzione di una richiesta. Nella maggior parte dei casi, riciclare il processo costituisce il modo più veloce per risolvere un problema. Anche se è possibile riavviare l'app direttamente dall'interno del portale di Azure, la funzionalità AutoHeal esegue questa operazione automaticamente. È sufficiente aggiungere alcuni trigger nel file web.config radice per l'app. Queste impostazioni funzionano allo stesso modo anche per le app non .NET.
Per altre informazioni, vedere il post di blog relativo alla correzione automatica di Siti Web di Azure.
Riavvia l'app
Il riavvio è spesso il modo più semplice per risolvere problemi occasionali. Nel pannello dell'app del portale di Azure sono disponibili le opzioni per arrestare o riavviare l'app.
È anche possibile gestire l'app usando Azure PowerShell. Per altre informazioni, vedere Uso di Azure PowerShell con Gestione risorse di Azure.