Condividi tramite


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.

Screenshot of Azure portal showing Azure Spring Apps Resource Health page with OOM message highlighted.

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.

Screenshot of Azure portal showing Azure Spring Apps Diagnose and solve problems page with Memory Usage highlighted in drop-down menu.

Utilizzo memoria fornisce una diagnosi semplice per l'utilizzo della memoria dell'app, come illustrato nello screenshot seguente.

Screenshot of Azure portal showing Azure Spring Apps Memory Usage page.

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.committede 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 di jvm.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.

Screenshot of Azure portal showing Azure Spring Apps Metrics page.

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.

Screenshot of Azure portal showing app overview page with Troubleshooting button highlighted.

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:

Screenshot of Azure portal showing app configuration page with JVM options highlighted.

Vedi anche