Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Internet Information Services
Questo strumento di risoluzione dei problemi consente di identificare la causa di un elevato utilizzo elevato della CPU in un pool di applicazioni Internet Information Services (IIS). L'utilizzo della CPU aumenta in genere quando un'applicazione Web gestisce le richieste. Tuttavia, se la CPU rimane costantemente a un livello elevato (80% o superiore) per periodi prolungati, le prestazioni dell'applicazione subiscono. Pertanto, è importante comprendere la causa di una CPU elevata sostenuta in modo da poter risolvere il problema.
Scenario
Un pool di applicazioni in IIS presenta un periodo prolungato di utilizzo elevato della CPU che supera l'80%. Quando si testa l'applicazione, non si verificano problemi. Quindi, l'applicazione sperimenta il carico utente effettivo e la CPU sale fino a una percentuale elevata e rimane lì. Per eseguire il ripristino, è necessario riavviare il pool di applicazioni. Tuttavia, la CPU torna a un livello elevato dopo il riavvio.
Strumenti di diagnostica
- Diagnostica di debug (DebugDiag)
- Monitor prestazioni (Perfmon)
- PerfView
Raccolta dei dati
Quando si verificano problemi di utilizzo elevato della CPU, determinare prima di tutto il processo che utilizza la maggior parte della CPU. Usare la scheda Processi in Gestione attività per trovare queste informazioni. Assicurati di selezionare la casella di controllo Mostra i processi di tutti gli utenti. Lo screenshot seguente mostra questa casella selezionata e mostra che il processo (il w3wp.exe processo che ospita un pool di applicazioni IIS) utilizza un livello elevato di CPU.
È anche possibile usare Performance Monitor per determinare quale processo usa la maggior parte della CPU. Per altre informazioni su come usare Performance Monitor, vedere Analisi dei dati sulle prestazioni.
Suggerimento
Per identificare il pool di applicazioni associato a un determinato w3wp.exe processo, aprire una finestra del prompt dei comandi amministrativa, passare alla %windir%\System32\inetsrv cartella (cd %windir%\System32\inetsrv) e quindi eseguire appcmd list wp. Questo comando mostra l'identificatore del processo (PID) del w3wp.exe processo tra virgolette. È possibile associare il PID al PID disponibile in Gestione attività.
Dopo aver verificato che un processo riscontra un w3wp.exe utilizzo elevato della CPU, determinare la causa del problema raccogliendo le informazioni seguenti:
- Set di raccolta dati di Performance Monitor
- O entrambi:
Annotazioni
In generale, la traccia ETW non influisce sulle prestazioni. Questa funzionalità rende utile negli scenari di produzione in cui le prestazioni del server devono essere mantenute durante la raccolta dei log. In confronto, i thread vengono sospesi durante la raccolta di file di dump della memoria. Pertanto, le prestazioni del server potrebbero essere ridotte durante la raccolta di file di dump.
Una traccia ETW contiene informazioni dettagliate relative all'utilizzo della CPU nel tempo. Tuttavia, una traccia ETW non fornisce una visualizzazione approfondita degli oggetti, dei relativi valori e delle relative radici fornite da un file di dump della memoria. Pertanto, una traccia ETW è più utile per gli scenari in cui l'utilizzo della CPU è elevato, ma il consumo di memoria è normale.
L'obiettivo di questa raccolta dati è osservare le operazioni sui thread non in attesa quando l'utilizzo della w3wp.exe CPU è più elevato. Quando si raccolgono dati, seguire queste indicazioni:
- Raccogliere più tracce o file di dump (tre sono in genere sufficienti).
- Raccogliere tracce o file di dump dallo stesso ID processo.
- Raccogliere tracce o file di dump a distanza di 10 secondi per ridurre al minimo il tempo tra di essi. Questo metodo consente di assicurarsi che gli stessi thread siano ancora attivi in ogni file di traccia o dump, in modo da poter identificare meglio quali thread utilizzano la maggior parte della CPU.
- Raccogliere i file di dump quando l'utilizzo della CPU di
w3wp.exeè elevato o anomalo, non solo quando l'utilizzo totale della CPU del server è elevato.
Raccogliere un insieme di raccolta dati del Monitoraggio delle prestazioni
I dati del Monitoraggio delle Prestazioni sono spesso fondamentali per determinare la causa di problemi di CPU elevato. Può anche essere utile ottenere una visualizzazione "generale" delle prestazioni dell'applicazione.
È possibile visualizzare i dati Perfmon in tempo reale o raccoglierli in un set di agenti di raccolta dati per una revisione successiva. Per risolvere un problema di alto utilizzo della CPU, è necessario un set di raccolta dati. Per creare il set, seguire questa procedura:
- Nel Pannello di controllo aprire Strumenti di amministrazione.
- Fare doppio clic su Monitoraggio prestazioni.
- Espandi il nodo Set di raccolta dati.
- Fare clic con il pulsante destro del mouse su Definito dall'utente, quindi scegliere Nuovo>set di agenti di raccolta dati.
- Assegnare all'agente di raccolta dati il nome High CPU.
- Selezionare Crea manualmente (avanzate).
- Seleziona Avanti.
- Selezionare Crea dati log.
- Selezionare la casella di controllo Contatore prestazioni.
- Seleziona Avanti.
- Selezionare Aggiungi. Se l'applicazione non è un'applicazione ASP.NET, andare al passaggio 19.
- Scorrere fino alla parte superiore dell'elenco dei contatori e selezionare Memoria CLR .NET.
- Nell'elenco di istanze selezionare <tutte le istanze>.
- Per aggiungere i contatori all'elenco dei contatori aggiunti, selezionare Aggiungi.
- Selezionare ASP.NET dall'elenco dei contatori e quindi selezionare Aggiungi.
- Nell'elenco dei contatori selezionare ASP.NET Applicazioni.
- Nell'elenco di istanze selezionare <tutte le istanze>.
- Selezionare Aggiungi.
- Nell'elenco dei contatori espandere Processo. Assicurarsi di espandere Processo e non Processore.
- Nell'oggetto Process selezionare % Tempo processore.
- Nell'elenco di istanze selezionare <tutte le istanze>.
- Selezionare Aggiungi.
- Nell'elenco dei contatori espandere Thread.
- Nell'oggetto Thread selezionare % Tempo processore.
- Nell'elenco di istanze selezionare <tutte le istanze>.
- Selezionare Aggiungi.
- Nell'elenco di istanze selezionare THREAD ID.
- Selezionare Aggiungi.
La finestra di dialogo dovrebbe ora essere simile allo screenshot seguente.
Selezionare OK>Avanti. Si noti dove viene salvato il set di raccolta dati. È possibile modificare questa posizione se necessario. Selezionare quindi Fine.
Il set di raccolta dati non è ancora in esecuzione. Per avviarlo, passare al nodo Definito dall'utente , individuare e fare clic con il pulsante destro del mouse su High CPU (CPU elevata) e quindi scegliere Start (Avvia ) dal menu.
Raccogliere un file di dump della memoria in modalità utente usando Debug Diagnostics
Il modo più semplice per raccogliere i file di dump dei processi in modalità utente quando si verifica un elevato utilizzo della CPU consiste nell'usare Debug Diagnostics.
Scaricare DebugDiag, installarlo ed eseguirlo nel server. Quando si esegue DebugDiag, lo strumento visualizza la finestra di dialogo Seleziona tipo di regola . Per creare una regola di crash per il pool di applicazioni, seguire questa procedura:
- Selezionare Prestazioni>Avanti.
- Selezionare Contatori delle prestazioni>Avanti.
- Selezionare Aggiungi trigger perf.
- Espandere l'oggetto Processore (non il Processo) e quindi selezionare % Tempo Processore.
- Nell'elenco delle istanze selezionare _Total.
- Selezionare Aggiungi>OK.
- Selezionare il trigger appena aggiunto e quindi selezionare Modifica soglie.
- Nell'elenco a discesa selezionare Sopra.
- Impostare la soglia su 80.
- Immettere 20 per il numero di secondi. Se necessario, è possibile modificare questo valore. Tuttavia, per evitare trigger falsi, prestare attenzione a non specificare un numero ridotto di secondi.
- Seleziona OK.
- Seleziona Avanti.
- Selezionare Aggiungi destinazione dump.
- Nell'elenco a discesa selezionare Pool di applicazioni Web.
- Nell'elenco dei pool di applicazioni selezionare il pool di applicazioni.
- Seleziona OK.
- Selezionare Avanti due volte.
- Immettere un nome per la regola, se necessario, e prendere nota del percorso in cui salvare i file di dump. È possibile modificare questa posizione in un secondo momento.
- Seleziona Avanti.
- Selezionare Attiva la regola ora e quindi selezionare Fine.
Suggerimento
È possibile creare file di dump di più pool di applicazioni aggiungendo più destinazioni file di dump. Usare la stessa tecnica usata nei passaggi da 13 a 15.
Questa regola crea 11 file di dump. I primi 10 sono "mini dump". Il file di dump finale ha memoria completa ed è molto più grande.
Dopo che si verifica un problema di elevato utilizzo della CPU, impedire al set di raccolta dati Perfmon di raccogliere dati. Per arrestare la raccolta, fare clic con il pulsante destro del mouse sul set di raccolta dati CPU ad alto consumo elencato nel nodo Definito dall'utente e quindi scegliere Arresta.
Raccogliere tracce ETW usando PerfView
- Scaricare PerfView ed eseguirlo come amministratore.
- Selezionare Raccogli>Raccogli.
- Selezionare le caselle di controllo Zip, Merge e Thread Time .
- Espandere Opzioni avanzate e selezionare la casella di controllo IIS .
- Selezionare Avvia raccolta. PerfView inizia a raccogliere i dati.
- Al termine dell'esecuzione di PerfView, selezionare Arresta raccolta.
PerfView unisce più file ETL in un file .zip e archivia il file nella stessa cartella di PerfView.exe. Il file compresso verrà condiviso per l'analisi.
Analisi dei dati
Dopo un evento di alta attività della CPU, hai a disposizione due set di dati da analizzare: il set di raccolta dati Perfmon e i file di dump della memoria. Per iniziare, esaminare i dati perfmon.
Analizzare i dati sulle prestazioni
Per esaminare i dati di Perfmon relativi al problema, fare clic con il pulsante destro del mouse sul set di raccolta dati Alta CPU elencato nel nodo Definito dall'utente e quindi selezionare Ultimo report. Il report è simile allo screenshot seguente.
Rimuovere tutti i contatori correnti in modo da poter aggiungere quelli espliciti da rivedere. Selezionare il primo contatore nell'elenco, tenere premuto MAIUSC, scorrere fino alla fine dell'elenco, selezionare l'ultimo contatore e quindi premere Elimina.
Aggiungere ora il contatore Processo / % Tempo del Processore. Segui questi passaggi:
- Fare clic con il pulsante destro del mouse in un punto qualsiasi del riquadro destro di Perfmon e scegliere Aggiungi contatori.
- Espandere l'oggetto Process .
- Nell'elenco selezionare % Tempo processore.
- Nell'elenco di istanze selezionare <tutte le istanze>.
- Selezionare Aggiungi.
- Seleziona OK.
È ora disponibile una visualizzazione che mostra un grafico del tempo del processore usato da ogni processo nel computer durante l'esecuzione del set di raccolta dati. Il modo più semplice per isolare il processo usato per il livello più elevato di CPU consiste nell'abilitare la funzionalità di evidenziazione di Perfmon. Selezionare il primo contatore nell'elenco e quindi premere CTRL+H. Il processo selezionato viene visualizzato come una linea nera grassetto nel grafico.
Usare la freccia giù sulla tastiera per spostarsi nell'elenco dei processi finché non si trova il processo che mostra la maggior parte dell'utilizzo della CPU. Nello screenshot seguente è possibile vedere chiaramente che il w3wp.exe processo usava una grande quantità di CPU. Questo risultato conferma che il pool di applicazioni IIS causa un utilizzo elevato della CPU nel computer.
Suggerimento
Perfmon consente di determinare i problemi di prestazioni nell'applicazione. I dati raccolti nel log di Perfmon indicano il numero di richieste in esecuzione (usando gli oggetti ASP.NET e ASP.NET Applications). Può anche mostrare altri dati importanti sulle prestazioni relativi alle prestazioni dell'applicazione.
Per determinare la causa del problema elevato della CPU, esaminare i file di dump creati tramite DebugDiag.
Analizzare i dump con DebugDiag
DebugDiag può riconoscere molti problemi eseguendo un'analisi automatica dei file di dump. Per questo problema, Gli analizzatori delle prestazioni di DebugDiag consentono di identificare la causa radice della CPU elevata. Per usare l'analizzatore, seguire questa procedura:
- Selezionare la scheda Analisi Avanzata in DebugDiag.
- Seleziona i analizzatori di prestazioni.
- Selezionare Aggiungi file di dati.
- Passare al percorso in cui sono stati creati i file di dump. Per impostazione predefinita, questa sarà una sottocartella della cartella C:\Programmi\DebugDiag\Logs .
- Selezionare uno dei file di dump e quindi premere CTRL+A per selezionare tutti i file in tale cartella.
- Selezionare Apri.
- Selezionare Avvia analisi.
DebugDiag richiede alcuni minuti per analizzare i file e fornire un'analisi. Dopo che questo processo termina, viene visualizzata una pagina simile al seguente screenshot.
La parte superiore del report indica che è stata rilevata una CPU elevata. Nella colonna destra vengono visualizzate raccomandazioni che includono un collegamento ai primi sette thread in base al tempo medio della CPU. Selezionare il collegamento per visualizzare le informazioni sulle operazioni eseguite dai principali consumer di CPU, come nell'esempio seguente.
La pagina delle statistiche delle funzioni come appare in un browser.
In questo esempio la pagina default.aspx nell'applicazione FastApp è in esecuzione. Se si esamina più in basso lo stack di chiamate (nella parte inferiore della pagina), è possibile notare che questo thread sta eseguendo la concatenazione di stringhe. Si noti la chiamata a System.String.Concat nello stack di chiamate. Se si analizzano gli altri thread CPU principali, viene visualizzato lo stesso modello.
Il passaggio successivo consiste nel esaminare l'evento Page_Load nella pagina default.aspx dell'applicazione FastApp. È possibile trovare il codice seguente:
htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";
Questo tipo di codice causa un utilizzo elevato della CPU.
Analizzare le tracce ETW raccolte da PerfView
Le tracce ETW raccolte tramite PerfView sono particolarmente utili quando si contatta il supporto tecnico Microsoft per ulteriore assistenza. Avere il file di traccia ETW pronto quando si apre un caso di supporto per aiutare i tecnici del supporto Tecnico Microsoft ad analizzare i modelli di consumo della CPU nel corso del tempo e identificare la causa radice più rapidamente.
Per altre informazioni sull'analisi delle tracce ETW autonomamente, vedere Esercitazione su PerfView: Analisi delle prestazioni della CPU semplice.
Conclusione
Usando Perfmon, DebugDiag e PerfView, è possibile raccogliere facilmente i dati per determinare la causa di un utilizzo elevato della CPU nei pool di applicazioni. Se non è possibile trovare la causa radice usando queste tecniche, contattare il supporto tecnico Microsoft per ulteriore assistenza. Avendo pronti i file di dati e dump di Perfmon quando si apre un caso, è possibile ridurre notevolmente il tempo necessario per consentire ai tecnici del supporto Tecnico Microsoft di assistere l'utente.
Altre risorse
- Risoluzione dei problemi relativi all'utilizzo elevato della CPU
- Cosa raccogliere per diagnosticare problemi di utilizzo elevato della CPU o blocco del sistema
- Demo di debug .NET
Clausola di esclusione di responsabilità per il contatto di terze parti
Microsoft fornisce informazioni di contatto di terze parti per aiutarti a trovare ulteriori informazioni su questo argomento. Queste informazioni di contatto sono soggette a modifica senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni di contatto di terze parti.