Strumenti per risolvere i problemi di memoria
Nota
Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.
Questo articolo si applica a: ✔️ Basic/Standard ✔️ Enterprise
Questo articolo descrive vari strumenti utili per la risoluzione dei problemi di memoria Java. È possibile usare questi strumenti in molti scenari non limitati ai problemi di memoria, ma questo articolo è incentrato solo sull'argomento della memoria.
Avvisi e diagnostica
Le sezioni seguenti descrivono gli avvisi di integrità delle risorse e la diagnostica disponibili tramite il portale di Azure.
Resource Health
È possibile monitorare gli eventi del ciclo di vita delle app e configurare gli avvisi con il log attività di Azure e Integrità dei servizi di Azure. Per altre informazioni, vedere Monitorare gli eventi del ciclo di vita delle app usando il log attività di Azure e Integrità dei servizi di Azure.
Integrità risorse invia avvisi sugli eventi di riavvio dell'app a causa di problemi di memoria insufficiente del contenitore. Per altre informazioni, vedere Problemi di riavvio delle app causati da problemi di memoria insufficiente.
Lo screenshot seguente mostra un avviso di integrità delle risorse dell'app che indica un problema di OOM.
Diagnostica e risoluzione dei problemi
La diagnostica di Azure Spring Apps è un'esperienza interattiva per risolvere i problemi dell'app senza configurazione. Per altre informazioni, vedere Auto-diagnosi e risoluzione dei problemi in App Spring di Azure.
Nella portale di Azure è possibile trovare Utilizzo memoria in Diagnostica e risoluzione dei problemi, come illustrato nello screenshot seguente.
Utilizzo memoria fornisce una diagnosi semplice per l'utilizzo della memoria dell'app, come illustrato nello screenshot seguente.
Metrica
Le sezioni seguenti descrivono le metriche che illustrano i problemi, tra cui utilizzo elevato della memoria, memoria heap troppo grande e anomali di Garbage Collection anomali (troppo frequenti o non abbastanza frequenti). Per altre informazioni, vedere Avvio rapido: Monitoraggio delle app Di Azure Spring con log, metriche e traccia.
Utilizzo della memoria dell'app
L'utilizzo della memoria dell'app è una percentuale uguale alla memoria dell'app usata per il limite di memoria dell'app. Questo valore mostra l'intera memoria dell'app.
jvm.memory.used/committed/max
Per la memoria JVM sono disponibili tre metriche: jvm.memory.used
, jvm.memory.committed
e jvm.memory.max
, descritte nell'elenco seguente.
"Memoria JVM" non è un concetto chiaramente definito. jvm.memory
Ecco la somma della memoria dell'heap e della parte precedente di permGen della memoria non heap. La memoria JVM non include memoria diretta o altra memoria come lo stack di thread. L'attuatore Spring Boot raccoglie queste tre metriche e determina l'ambito di jvm.memory
.
jvm.memory.used
è la quantità di memoria JVM usata, inclusa la memoria heap usata e usata in precedenza permGen nella memoria non heap.jvm.memory.used
è una riflessione importante della modifica della memoria dell'heap, perché la parte precedente permGen è in genere stabile.Se si trovano
jvm.memory.used
dimensioni troppo grandi, è consigliabile impostare dimensioni massime di memoria heap inferiori.jvm.memory.committed
è la quantità di memoria di cui viene eseguito il commit per l'uso della JVM. Le dimensioni dijvm.memory.committed
sono fondamentalmente il limite di memoria JVM utilizzabile.jvm.memory.max
è la quantità massima di memoria JVM, non da confondere con la quantità disponibile reale.Il valore di
jvm.memory.max
può talvolta generare confusione perché può essere molto più alto rispetto alla memoria dell'app disponibile. Per chiarire,jvm.memory.max
è la somma di tutte le dimensioni massime della memoria heap e della parte precedente permGen della memoria non heap, indipendentemente dalla memoria disponibile reale. Ad esempio, se un'app è impostata con 1 GB di memoria nel portale di Azure Spring Apps, le dimensioni di memoria heap predefinite sono pari a 0,5 GB. Per altre informazioni, vedere la sezione Dimensioni massime massime predefinite dell'heap della gestione della memoria Java.Se la dimensione predefinita dello spazio della classe compressa è 1 GB, il valore di
jvm.memory.max
è maggiore di 1,5 GB indipendentemente dal fatto che la dimensione della memoria dell'app sia 1 GB. Per altre informazioni, vedere Java Platform, edizione Standard Guida all'ottimizzazione di Garbage Collection di Macchine virtuali HotSpot: altre considerazioni nella documentazione di Oracle.
jvm.gc.memory.allocate/promoted
Queste due metriche sono destinate all'osservazione di Java Garbage Collection (GC). Per altre informazioni, vedere la sezione Garbage Collection Java della gestione della memoria Java. La dimensione massima dell'heap influisce sulla frequenza di GC secondario e GC completo. Il metaspace massimo e la dimensione massima della memoria diretta influisce su GC completo. Se si vuole modificare la frequenza di Garbage Collection, è consigliabile modificare le dimensioni massime di memoria seguenti.
jvm.gc.memory.allocated
è la quantità di aumento delle dimensioni del pool di memoria di giovane generazione dopo un GC e prima del successivo. Questo valore riflette GC secondario.jvm.gc.memory.promoted
è la quantità di aumento delle dimensioni del pool di memoria di generazione precedente dopo GC. Questo valore riflette il GC completo.
Questa funzionalità è disponibile nella portale di Azure, come illustrato nello screenshot seguente. È possibile scegliere metriche specifiche e aggiungere filtri per un'app, una distribuzione o un'istanza specifiche. È anche possibile applicare la suddivisione.
Ulteriore debug
Per altre operazioni di debug, è possibile acquisire manualmente dump dell'heap e dump dei thread e usare Java Flight Recorder (JFR). Per altre informazioni, vedere Acquisire manualmente dump dell'heap e dump del thread e usare Java Flight Recorder in Azure Spring Apps.
I dump dell'heap registrano lo stato della memoria dell'heap Java. I dump del thread registrano gli stack di tutti i thread in tempo reale. Questi strumenti sono disponibili tramite l'interfaccia della riga di comando di Azure e nella pagina dell'app del portale di Azure, come illustrato nello screenshot seguente.
Per altre informazioni, vedere Acquisire manualmente dump dell'heap e dump del thread e usare Java Flight Recorder in Azure Spring Apps. È anche possibile usare strumenti di terze parti come Memory Analyzer per analizzare i dump dell'heap.
Modificare le configurazioni per risolvere i problemi
Alcuni problemi che possono essere identificati includono L'OOM del contenitore, la memoria heap troppo grande e un'operazione di Garbage Collection anomala. Se si identifica uno di questi problemi, potrebbe essere necessario configurare le dimensioni massime della memoria nelle opzioni JVM. Per altre informazioni, vedere la sezione Opzioni JVM importanti della gestione della memoria Java.
È possibile modificare le opzioni JVM usando il portale di Azure o l'interfaccia della riga di comando di Azure.
Nella portale di Azure passare all'app e quindi selezionare Configurazione nella sezione Impostazioni del menu di spostamento. Nella scheda Generale Impostazioni aggiornare il campo opzioni JVM, come illustrato nello screenshot seguente:
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per