Risolvi i problemi di CPU elevata nelle macchine virtuali Windows di Azure
Si applica a: ✔️ macchine virtuali di Windows
Riepilogo
I problemi di prestazioni si verificano in diversi sistemi operativi o applicazioni e ogni problema richiede un approccio univoco per la risoluzione dei problemi. La maggior parte di questi problemi riguarda CPU, memoria, rete e input/output (I/O) come posizioni chiave in cui si verifica il problema. Ognuna di queste aree genera sintomi diversi (a volte contemporaneamente) e richiede una diagnosi e una soluzione diversa.
Questo articolo illustra i problemi di utilizzo elevato della CPU che si verificano nelle macchine virtuali (VM) di Azure che eseguono il sistema operativo Windows.
Problemi con CPU elevata nelle macchine virtuali Windows di Azure
A parte i problemi di I/O e di latenza di rete, la risoluzione dei problemi di CPU e memoria richiede gli stessi strumenti e passaggi dei server locali. Uno degli strumenti che Microsoft supporta in genere è PerfInsights (disponibile sia per Windows che per Linux). PerfInsights può fornire una diagnosi delle procedure consigliate per le macchine virtuali di Azure in un report intuitivo. PerfInsights è anche uno strumento wrapper che consente di raccogliere dati Perfmon, Xperf e Netmon, a seconda dei flag selezionati all'interno dello strumento.
La maggior parte degli strumenti esistenti per la risoluzione dei problemi relativi alle prestazioni, ad esempio Perfmon o Procmon, usati per i server locali funzioneranno nelle macchine virtuali Windows di Azure. Tuttavia, PerfInsights è progettato in modo esplicito per le macchine virtuali di Azure per fornire ulteriori informazioni, tra cui procedure consigliate di Azure, procedure consigliate per SQL, grafici di latenza di I/O ad alta risoluzione, schede CPU e memoria e così via.
Indipendentemente dal fatto che venga eseguito in modalità utente o modalità kernel, qualsiasi thread di un processo attivo richiede cicli della CPU per eseguire il codice da cui è stato creato. Molti problemi sono direttamente correlati al carico di lavoro. Il tipo di carico di lavoro esistente sul server determina il consumo di risorse, inclusa la CPU.
Fattori comuni
I seguenti fattori sono comuni in una situazione con CPU elevata:
Una recente modifica o distribuzione del codice applicabile principalmente ad app come Internet Information Services (IIS), Microsoft SharePoint, Microsoft SQL Server o applicazioni di terze parti.
Un aggiornamento recente che potrebbe essere correlato a un aggiornamento a livello di sistema operativo o ad aggiornamenti e correzioni cumulativi a livello di applicazione.
Una modifica della query o indici obsoleti. Le applicazioni del livello dati di SQL Server e Oracle hanno anche un'ottimizzazione del piano di query come altro fattore. Le modifiche ai dati o la mancanza di indici appropriati possono far sì che diverse query diventino più intensive in termini di calcolo.
Specifico per la macchina virtuale di Azure. Esistono alcuni processi come RDAgent e processi specifici dell'estensione come l'agente di monitoraggio, l'agente MMA o il client di sicurezza che possono causare un consumo elevato della CPU. Questi processi devono essere visualizzati dal punto di vista della configurazione o dei problemi noti.
Risolvere il problema
Questo articolo si concentra sull'isolamento del processo problematico. Ulteriori analisi saranno specifiche per il processo che sta determinando un elevato consumo di CPU.
Ad esempio, se il processo è SQL Server (sqlservr.exe), i passaggi successivi consisteranno nell'analizzare quale query utilizzava la maggior parte dei cicli della CPU in un periodo di tempo specifico.
Ambito del problema
Di seguito sono riportate alcune domande da porre durante la risoluzione del problema:
C'è uno schema per il problema? Ad esempio, il problema della CPU elevata si verifica a una certa ora ogni giorno, settimana o mese? In tal caso, puoi correlare questo problema a un lavoro, un rapporto o un accesso utente?
Il problema della CPU elevata è iniziato dopo una recente modifica del codice? Hai applicato un aggiornamento in Windows o in un'applicazione?
Il problema della CPU elevata è iniziato dopo una modifica del carico di lavoro, ad esempio un aumento del numero di utenti, un afflusso di dati più elevato o un numero maggiore di rapporti?
Per Azure, il problema della CPU elevata è iniziato in una delle seguenti condizioni?
- Dopo una recente ridistribuzione o riavvio
- Quando uno SKU o un tipo di VM è cambiato
- Quando è stata aggiunta una nuova estensione
- Dopo che sono state apportate modifiche al bilanciamento del carico
Avvertenze azzurre
Comprendi il tuo carico di lavoro. Quando selezioni una macchina virtuale, potresti sottovalutare i conteggi della CPU virtuale (vCPU) quando guardi al costo mensile complessivo dell'hosting. Se il carico di lavoro è a elevato utilizzo di calcolo, la selezione di uno SKU della macchina virtuale più piccolo con una o due vCPU potrebbe causare problemi relativi al carico di lavoro. Testa diverse configurazioni per il tuo carico di lavoro per determinare la migliore capacità di elaborazione richiesta.
Esistono alcune serie VM, come la serie B (Burst Mode), che sono consigliate per la garanzia della qualità (QA) e i test. L'utilizzo di queste serie nell'ambiente di produzione limita la capacità di calcolo dopo l'esaurimento dei crediti CPU.
Per applicazioni note come SQL Server, Oracle, RDS (Servizi Desktop remoto), Desktop virtuale di Azure, IIS o SharePoint, sono disponibili articoli sulle procedure consigliate di Azure che includono raccomandazioni per la configurazione minima per questi carichi di lavoro.
Problemi relativi alla CPU elevata
Se il problema si sta verificando in questo momento, questa è l'occasione migliore per acquisire la traccia del processo per determinare la causa del problema. Puoi usare gli strumenti esistenti che hai usato per i server Windows locali per individuare il processo. Gli strumenti seguenti sono consigliati dal supporto di Azure per le macchine virtuali di Azure.
PerfInsights
PerfInsights è lo strumento consigliato dal supporto di Azure per i problemi di prestazioni delle macchine virtuali. È progettato per trattare le best practice e le schede di analisi dedicate per CPU, memoria e grafici I/O ad alta risoluzione. È possibile eseguirlo su richiesta tramite il portale di Azure o dall'interno della macchina virtuale. Puoi condividere i dati con il team di supporto di Azure.
Eseguire PerfInsights
PerfInsights è disponibile per entrambi i sistemi operativi Windows e Linux. Per Windows, ecco le opzioni.
Esegui e analizza i report tramite il portale di Azure
Quando viene installato tramite il portale di Azure, installa effettivamente un'estensione nella macchina virtuale. Gli utenti possono anche installare PerfInsights come estensione accedendo direttamente al pannello Estensioni presenti nella macchina virtuale e quindi scegliendo un'opzione di diagnostica delle prestazioni.
Portale di Azure Opzione 1
Sfoglia il pannello della macchina virtuale e seleziona l'opzione Diagnostica delle prestazioni. Ti verrà chiesto di installare l'opzione (usa le estensioni) sulla macchina virtuale per cui l'hai selezionata.
opzione portale di Azure 2
Passare a Diagnostica e risoluzione dei problemi nel pannello VM e cercare Problemi di prestazioni VM.
Se selezioni Risoluzione dei problemi, viene caricata la schermata di installazione di PerfInsights.
Se selezioni Installa, l'installazione fornisce diverse opzioni di raccolta.
Le opzioni numerate nello screenshot si riferiscono ai seguenti commenti:
Per l'opzione CPU elevata, selezionare Analisi delle prestazioni o Avanzate.
Quando aggiungi i sintomi qui, verranno aggiunti al report, che ti aiuta a condividere le informazioni con il supporto di Azure.
Seleziona la durata della raccolta dei dati. Per l'opzione CPU elevata, selezionare una durata di almeno 15 minuti o maggiore. In modalità portale di Azure è possibile raccogliere fino a 15 minuti di dati. Per periodi di raccolta più lunghi, è necessario eseguire il programma come eseguibile all'interno della VM.
Se il supporto di Azure ti chiede di raccogliere questi dati, puoi aggiungere qui il numero del ticket. Questo campo è facoltativo.
Seleziona questo campo per accettare il contratto di licenza con l'utente finale (EULA).
Selezionare questo campo se si intende rendere disponibile questo report al team di supporto di Azure che aiuta in questo caso.
Il report viene archiviato in uno degli account di archiviazione inclusi nell'abbonamento. È disponibile per la visualizzazione e il download in seguito.
Eseguire PerfInsights dall'interno della VM
Questo metodo può essere utilizzato se si intende eseguire PerfInsights per periodi più lunghi. L'articolo su PerfInsights fornisce una panoramica dettagliata dei diversi comandi e flag necessari per eseguire PerfInsights come eseguibile. Ai fini dell'utilizzo elevato della CPU, avrai bisogno di una delle seguenti modalità:
Scenario avanzato
PerfInsights /run advanced xp /d 300 /AcceptDisclaimerAndShareDiagnostics
Scenario macchina virtuale lenta (prestazioni)
PerfInsights /run vmslow /d 300 /AcceptDisclaimerAndShareDiagnostics /sa <StorageAccountName> /sk <StorageAccountKey>
L'output del comando si troverà nella stessa cartella in cui è stato salvato l'eseguibile di PerfInsights.
Cosa cercare nel rapporto
Dopo aver eseguito il report, la posizione del contenuto dipende dal fatto che sia stato eseguito tramite il portale di Azure o come file eseguibile. Per entrambe le opzioni, accedi alla cartella di log generata o scarica (se portale di Azure) in locale per l'analisi.
Eseguire il portale di Azure
Esegui dall'interno della macchina virtuale
La struttura della tua cartella dovrebbe assomigliare alle seguenti immagini:
Eventuali raccolte aggiuntive come Perfmon, Xperf, Netmon, registri SMB, registri eventi e così via, possono essere trovate nella cartella Output.
Il rapporto vero e proprio insieme ad analisi e raccomandazioni.
Sia per Performance (VMslow) che per Advanced, il report raccoglie le informazioni perfmon per la durata dell'esecuzione di PerfInsights.
I registri eventi mostrano una rapida visualizzazione di utili dettagli sugli arresti anomali a livello di sistema o di processo.
Dove iniziare
Apri il rapporto PerfInsights. La scheda Risultati registra eventuali valori anomali in termini di consumo di risorse. Se sono presenti istanze di utilizzo elevato della CPU, la scheda Risultati lo classificherà come Impatto elevato o Impatto medio.
Analogamente all'esempio precedente, PerfInsights è stato eseguito per 30 minuti. Per metà del tempo, il processo evidenziato ha esaurito la CPU sul lato superiore. Se lo stesso processo fosse stato eseguito per tutto il tempo della raccolta, il livello di impatto sarebbe cambiato in ELEVATP.
Se espandi l'evento Risultati, vedrai diversi dettagli chiave. La scheda elenca i processi in ordine decrescente, per Consumo medio di CPU e mostra se il processo era correlato al sistema, a un'app di proprietà di Microsoft (SQL, IIS) o a un processo di terze parti.
Altri dettagli
C'è una sottoscheda dedicata sotto CPU che può essere utilizzata per l'analisi dettagliata dei pattern, per core o per processo.
La scheda Primi consumatori di CPU ha due sezioni separate di interesse e qui puoi visualizzare le statistiche per processore. Il design dell'applicazione è spesso a thread singolo o si collega a un singolo processore. In questo scenario, uno o pochi core vengono eseguiti al 100%, mentre gli altri core vengono eseguiti ai livelli previsti. Questi scenari sono più complessi perché la CPU media sul server sembra funzionare come previsto, ma i processi bloccati sui core con un utilizzo elevato saranno più lenti del previsto.
La seconda sezione (altrettanto importante) è Principali utilizzatori di CPU con esecuzione prolungata. Questa sezione mostra sia i dettagli del processo che il modello di utilizzo della CPU. L'elenco è ordinato mettendo in alto gli utilizzatori di CPU con media elevata.
Queste due schede saranno sufficienti per impostare il percorso per i successivi passaggi di risoluzione dei problemi. A seconda del processo che sta determinando la condizione di CPU elevata, dovrai rispondere alle domande poste in precedenza. Processi come SQL Server (sqlservr.exe) o IIS (w3wp.exe) richiedono un drill-down specifico sulle modifiche di query o codice che causano questa condizione. Per processi di sistema come WMI o Lsass.exe, devi seguire un percorso diverso.
Per i processi relativi alle macchine virtuali di Azure, ad esempio RDAgent, OMS e il monitoraggio degli eseguibili dell'estensione, potrebbe essere necessario correggere una nuova build o versione chiedendo assistenza al team di supporto di Azure.
Perfmon
Perfmon è uno dei primi strumenti per la risoluzione dei problemi relativi alle risorse su Windows Server. Non fornisce un rapporto chiaro che contenga raccomandazioni o risultati. Invece, richiede all'utente di esplorare i dati raccolti e utilizzare un filtro specifico sotto le diverse categorie di contatori.
PerfInsights raccoglie Perfmon come log aggiuntivo per scenari VMSlow e avanzati. Tuttavia, Perfmon può essere raccolto in modo indipendente e presenta questi vantaggi aggiuntivi:
Può essere ritirato a distanza.
Può essere pianificato tramite le Attività.
Può essere raccolto per periodi più lunghi o in modalità continua utilizzando la funzione di rollover.
Considera lo stesso esempio mostrato in PerfInsights per vedere come Perfmon mostra questi dati. Le categorie di contatori richieste sono le seguenti:
Informazioni sul processore > %Procesor Time> _Total
Processo > %ProcessorTime> Tutte le istanze
Dove iniziare
I nomi dei file di output di Perfmon hanno un'estensione .blg
. Puoi raccogliere questi file in modo indipendente o utilizzando PerfInsights. Per questa sezione, verrà utilizzato Perfmon .blg
che è incluso nei dati PerfInsights raccolti in base all'esempio precedente.
In Perfmon non sono disponibili report pronti per l'utente predefiniti. Esistono diverse visualizzazioni che cambiano il tipo di grafico, ma il filtraggio dei processi (o il lavoro necessario per identificare i processi colpevoli) è manuale.
Note
Lo Strumento PAL può utilizzare file.blg
e generare rapporti dettagliati.
Per iniziare, seleziona la categoria Aggiungi contatori.
In Contatori disponibili, selezionare il contatore %Tempo processore nella categoria Informazioni processore.
Seleziona _Total, che fornisce le statistiche di tutti i core combinati.
Selezionare Aggiungi. La finestra mostra %ProcessorTime sotto Contatori aggiunti.
Dopo che i contatori sono stati caricati, vedrai i grafici di tendenza della linea nell'intervallo di tempo della raccolta. È possibile selezionare o cancellare i contatori. Finora hai aggiunto solo un contatore.
Ogni contatore avrà valori Medio, Minimo e Massimo. Fare attenzione a entrambi i valori Medio e Massimo, in quanto il valore medio può variare a seconda della durata della raccolta dei dati. Se l'attività ad alta CPU è stata osservata per 10 minuti mentre la raccolta complessiva è stata di 40 minuti, i valori medi saranno molto più bassi.
Il grafico di tendenza precedente mostra che il Processore totale era vicino all'80% per circa 15 minuti.
Identifica il processo
Abbiamo identificato che il server ha avuto un consumo elevato di CPU per un determinato periodo di tempo, ma non abbiamo ancora identificato il driver. A differenza dell'utilizzo di PerfInsights, in questo caso è necessario cercare manualmente il processo responsabile.
Per questa attività è necessario cancellare o rimuovere i contatori %ProcessorTime aggiunti in precedenza, quindi aggiungere una nuova categoria:
- Processo > %ProcessorTime> Tutte le istanze
Questa categoria caricherà i contatori per tutti i processi in esecuzione in quel momento.
Su un tipico computer di produzione possono essere in esecuzione centinaia di processi. Pertanto, potrebbe essere necessario un po' di tempo per cancellare ogni contatore che sembra avere un grafico di tendenza basso o piatto.
Per accelerare questo processo, usa la vista Istogramma e cambia il tipo di vista da Linea a Istogramma, che ti darà un grafico a barre. Scoprirai che è più facile scegliere i processi che subiscono un utilizzo elevato della CPU durante il tempo di raccolta.
Poiché ci sarà sempre una barra per Totale, fare attenzione alle barre che mostrano un alto tasso di esaurimento. Puoi eliminare le altre barre per pulire la vista. Ora si può tornare alla visualizzazione Riga.
Ora è più facile trovare il processo responsabile. Per impostazione predefinita, i valori Max e Min sono multipli del numero dei core sul server o dei thread del processo.
L'elenco degli strumenti disponibili non si esaurisce con PerfInsights per Perfmon. Hai accesso ad altri strumenti, come ProcessMonitor (ProcMon) o Xperf. Sono disponibili molti strumenti di terze parti da utilizzare secondo necessità.
Strumenti di monitoraggio di Azure
Le macchine virtuali di Azure dispongono di metriche affidabili che includono informazioni di base come CPU, I/O di rete e byte di I/O. Per le metriche avanzate, ad esempio monitoraggio di Azure, sarà necessario effettuare solo poche selezioni per configurare e usare un account di archiviazione specificato.
Contatori di base (predefiniti).
Abilitazione di monitoraggio di Azure
Dopo aver abilitato le metriche di monitoraggio di Azure, il software installa un'estensione nella macchina virtuale e quindi avvia la raccolta di metriche granulari, che includono i contatori Perfmon.
Le categorie di contatori Base sono impostate come predefinite. Tuttavia, puoi anche impostare una raccolta Personalizzata.
Dopo aver abilitato le impostazioni, puoi visualizzare questi contatori Ospite nella sezione Metriche. Puoi anche impostare Avvisi (compresi i messaggi e-mail) se le metriche raggiungono una determinata soglia.
Per ulteriori informazioni su come utilizzare il Monitoraggio di Azure per gestire le macchine virtuali di Azure, consultare Monitoraggio delle macchine virtuali di Azure con il Monitoraggio di Azure.
Risoluzione dei problemi reattiva
Se il problema si è già verificato, innanzitutto è necessario scoprire cosa ha causato il problema con CPU elevata. La posizione reattiva può essere complicata. La modalità di raccolta dati non sarà così utile perché il problema si è già verificato.
Se questo problema si è verificato una sola volta, potrebbe essere difficile determinare quale app lo ha causato. Se la macchina virtuale di Azure è stata configurata per l'uso di OMS o altro rilevamento diagnostico, è comunque possibile ottenere informazioni dettagliate sulla causa del problema.
Se hai a che fare con uno schema ripetuto, raccogli i dati durante il periodo in cui è probabile che il problema si verifichi successivamente.
PerfInsights non dispone ancora di una funzionalità Esecuzione pianificata. Tuttavia, Perfmon può essere eseguito e pianificato tramite la riga di comando.
Comando logman
Il comando Logman Create Counter viene utilizzato per eseguire la raccolta Perfmon tramite la riga di comando, per pianificarla tramite Gestione attività o per eseguirla in remoto.
Esempio (include la modalità di raccolta remota)
Logman create counter LOGNAME -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 300 -c "\\SERVERNAME\LogicalDisk(*)\*" "\\SERVERNAME\Memory\*" "\\SERVERNAME\Network Interface(*)\*" "\\SERVERNAME\Paging File(*)\*" "\\SERVERNAME\PhysicalDisk(*)\*" "\\SERVERNAME\Process(*)\*" "\\SERVERNAME\Redirector\*" "\\SERVERNAME\Server\*" "\\SERVERNAME\System\*" "\\SERVERNAME\Terminal Services\*" "\\SERVERNAME\Processor(*)\*" "\\SERVERNAME\Cache\*" -si 00:01:00
Logman.exe può essere avviato anche da un computer VM di Azure peer nella stessa rete virtuale.
Per ulteriori informazioni su questi parametri, consultare logman create counter.
Dopo che i dati Perfmon sono stati raccolti mentre si verifica il problema, i passaggi rimanenti per analizzare i dati sono gli stessi descritti in precedenza.
Conclusione
Per qualsiasi problema di prestazioni, comprendere il carico di lavoro è la chiave per risolvere il problema. Le opzioni su diversi SKU di macchine virtuali e diverse opzioni di archiviazione su disco devono essere valutate mantenendo l'attenzione sul carico di lavoro di produzione. Il processo di test delle soluzioni su macchine virtuali diverse può aiutarti a prendere la decisione migliore.
Poiché le operazioni degli utenti e la quantità di dati variano, mantenere sempre un buffer nelle capacità di elaborazione, rete e I/O della VM. Ora, qualsiasi cambiamento improvviso nel carico di lavoro non ha un effetto così grande.
Se si prevede che il carico di lavoro aumenterà in breve tempo, passare a uno SKU superiore con maggiore potenza di calcolo. Se il carico di lavoro richiederà un'elevata intensità di calcolo, scegli saggiamente gli SKU della macchina virtuale.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.