Dela via


Verktyg för att felsöka minnesproblem

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise

Den här artikeln beskriver olika verktyg som är användbara för att felsöka Problem med Java-minne. Du kan använda dessa verktyg i många scenarier som inte är begränsade till minnesproblem, men den här artikeln fokuserar bara på minnesämnet.

Aviseringar och diagnostik

I följande avsnitt beskrivs aviseringar och diagnostik för resurshälsa som är tillgängliga via Azure-portalen.

Resurshälsa

Du kan övervaka händelser i appens livscykel och konfigurera aviseringar med Azure Activity Log och Azure Service Health. Mer information finns i Övervaka applivscykelhändelser med hjälp av Azure-aktivitetsloggen och Azure Service Health.

Resurshälsa skickar aviseringar om appomstartshändelser på grund av OOM-problem (out-of-memory). Mer information finns i Problem med omstart av appar som orsakas av minnesbrist.

Följande skärmbild visar en hälsoavisering för appresurser som anger ett OOM-problem.

Skärmbild av Azure-portalen som visar sidan Resource Health för Azure Spring Apps med OOM-meddelandet markerat.

Diagnostisera och lösa problem

Azure Spring Apps-diagnostik är en interaktiv upplevelse för att felsöka din app utan konfiguration. Mer information finns i Självdiagnostisera och lösa problem i Azure Spring Apps.

I Azure-portalen hittar du minnesanvändning under Diagnostisera och lösa problem, som du ser i följande skärmbild.

Skärmbild av Azure-portalen som visar sidan Diagnostisera och lösa problem i Azure Spring Apps med minnesanvändning markerad i den nedrullningsbara menyn.

Minnesanvändning ger en enkel diagnos för appminnesanvändning, enligt följande skärmbild.

Skärmbild av Azure-portalen som visar sidan minnesanvändning i Azure Spring Apps.

Mått

I följande avsnitt beskrivs mått som omfattar problem med hög minnesanvändning, hög minnesanvändning som är för stort och onormal skräpinsamling onormal (för ofta eller inte tillräckligt ofta). Mer information finns i Snabbstart: Övervaka Azure Spring Apps-appar med loggar, mått och spårning.

Användning av appminne

Appminnesanvändningen är en procentandel som är lika med det appminne som används dividerat med appens minnesgräns. Det här värdet visar hela appminnet.

jvm.memory.used/committed/max

För JVM-minne finns det tre mått: jvm.memory.used, jvm.memory.committedoch jvm.memory.max, som beskrivs i följande lista.

"JVM-minne" är inte ett tydligt definierat begrepp. jvm.memory Här är summan av heapminnet och den tidigare permGen-delen av icke-heapminnet. JVM-minnet innehåller inte direkt minne eller annat minne som trådstacken. Spring Boot-aktuatorn samlar in dessa tre mått och avgör omfånget jvm.memoryför .

  • jvm.memory.used är mängden använt JVM-minne, inklusive använt heapminne och använt tidigare permGen i icke-heapminne.

    jvm.memory.used är en stor återspegling av förändringen av heapminnet, eftersom den tidigare permGen-delen vanligtvis är stabil.

    Om du tycker att det är jvm.memory.used för stort kan du överväga att ange en mindre maximal minnesstorlek för heap.

  • jvm.memory.committed är mängden minne som har checkats in för den JVM som ska användas. Storleken på jvm.memory.committed är i princip gränsen för användbart JVM-minne.

  • jvm.memory.max är den maximala mängden JVM-minne, som inte ska förväxlas med den verkliga tillgängliga mängden.

    Värdet för jvm.memory.max kan ibland vara förvirrande eftersom det kan vara mycket högre än det tillgängliga appminnet. För att klargöra, jvm.memory.max är summan av alla maximala storlekar av heapminne och den tidigare permGen delen av icke-heap minne, oavsett det verkliga tillgängliga minnet. Om en app till exempel har angetts med 1 GB minne i Azure Spring Apps-portalen är standardstorleken för heapminnet 0,5 GB. Mer information finns i avsnittet Maximal heapstorlek för standard i Java-minneshantering.

    Om standardstorleken för komprimerat klassutrymme är 1 GB är värdet jvm.memory.max för större än 1,5 GB oavsett om appens minnesstorlek är 1 GB. Mer information finns i Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide: Andra överväganden i Oracle-dokumentationen .

jvm.gc.memory.allocated/promoted

Dessa två mått är till för att observera Java-skräpinsamling (GC). Mer information finns i avsnittet Java-skräpinsamling i Java-minneshantering. Den maximala heapstorleken påverkar frekvensen för mindre GC och fullständig GC. Den maximala metarymden och den maximala direkta minnesstorleken påverkar fullständig GC. Om du vill justera frekvensen för skräpinsamling bör du överväga att ändra följande maximala minnesstorlekar.

  • jvm.gc.memory.allocated är mängden ökning av storleken på den unga generationens minnespool efter en GC och före nästa. Det här värdet återspeglar mindre GC.

  • jvm.gc.memory.promoted är mängden ökning av storleken på den gamla generationens minnespool efter GC. Det här värdet återspeglar fullständig GC.

Du hittar den här funktionen på Azure-portalen, som du ser i följande skärmbild. Du kan välja specifika mått och lägga till filter för en specifik app, distribution eller instans. Du kan också använda delning.

Skärmbild av Azure-portalen som visar sidan Mått för Azure Spring Apps.

Ytterligare felsökning

För ytterligare felsökning kan du manuellt samla in heapdumpar och tråddumpar och använda Java Flight Recorder (JFR). Mer information finns i Avbilda heapdump och tråddumpning manuellt och använda Java Flight Recorder i Azure Spring Apps.

Heap dumpar registrerar tillståndet för Java-heapminnet. Tråddumpar registrerar staplarna för alla aktiva trådar. De här verktygen är tillgängliga via Azure CLI och på appsidan i Azure-portalen, som du ser i följande skärmbild.

Skärmbild av Azure-portalen som visar appöversiktssidan med knappen Felsökning markerad.

Mer information finns i Avbilda heapdump och tråddumpning manuellt och använda Java Flight Recorder i Azure Spring Apps. Du kan också använda verktyg från tredje part som Memory Analyzer för att analysera heapdumpar.

Ändra konfigurationer för att åtgärda problem

Några problem som du kan identifiera är container-OOM, heapminne som är för stort och onormal skräpinsamling. Om du identifierar något av dessa problem kan du behöva konfigurera den maximala minnesstorleken i JVM-alternativen. Mer information finns i avsnittet Viktiga JVM-alternativ i Java-minneshantering.

Du kan ändra JVM-alternativen med hjälp av Azure-portalen eller Azure CLI.

I Azure-portalen går du till din app och väljer sedan Konfiguration i avsnittet Inställningar på navigeringsmenyn. På fliken Allmänna inställningar uppdaterar du fältet JVM-alternativ enligt följande skärmbild:

Skärmbild av Azure-portalen som visar appkonfigurationssidan med JVM-alternativ markerade.

Se även