Hulpprogramma's voor het oplossen van geheugenproblemen
Notitie
De Basic-, Standard- en Enterprise-abonnementen worden afgeschaft vanaf medio maart 2025, met een pensioenperiode van 3 jaar. We raden u aan om over te stappen naar Azure Container Apps. Zie de aankondiging over buitengebruikstelling van Azure Spring Apps voor meer informatie.
Het standaardverbruik en het speciale abonnement worden vanaf 30 september 2024 afgeschaft, met een volledige afsluiting na zes maanden. We raden u aan om over te stappen naar Azure Container Apps. Zie Azure Spring Apps Standard-verbruik en toegewezen abonnement migreren naar Azure Container Apps voor meer informatie.
Dit artikel is van toepassing op:✅ Basic/Standard ✅ Enterprise
In dit artikel worden verschillende hulpprogramma's beschreven die handig zijn voor het oplossen van problemen met Java-geheugen. U kunt deze hulpprogramma's in veel scenario's gebruiken die niet beperkt zijn tot geheugenproblemen, maar dit artikel is alleen gericht op het onderwerp geheugen.
Waarschuwingen en diagnostische gegevens
In de volgende secties worden resourcestatuswaarschuwingen en diagnostische gegevens beschreven die beschikbaar zijn via Azure Portal.
Status van resources
U kunt gebeurtenissen voor de levenscyclus van apps bewaken en waarschuwingen instellen met azure-activiteitenlogboek en Azure Service Health. Zie Gebeurtenissen voor de levenscyclus van apps bewaken met behulp van azure-activiteitenlogboek en Azure Service Health voor meer informatie.
Resource Health verzendt waarschuwingen over gebeurtenissen voor opnieuw opstarten van apps vanwege problemen met onvoldoende geheugen (OOM). Zie Problemen met opnieuw opstarten van apps die worden veroorzaakt door problemen met onvoldoende geheugen voor meer informatie.
In de volgende schermopname ziet u een waarschuwing voor de resourcestatus van de app die een OOM-probleem aangeeft.
Problemen vaststellen en oplossen
Diagnostische gegevens van Azure Spring Apps zijn een interactieve ervaring voor het oplossen van problemen met uw app zonder configuratie. Zie Zelfdiagnose en los problemen op in Azure Spring Apps voor meer informatie.
In Azure Portal vindt u geheugengebruik onder Problemen vaststellen en oplossen, zoals wordt weergegeven in de volgende schermopname.
Geheugengebruik biedt een eenvoudige diagnose voor het geheugengebruik van apps, zoals wordt weergegeven in de volgende schermopname.
Metrische gegevens
In de volgende secties worden metrische gegevens beschreven die betrekking hebben op problemen, waaronder hoog geheugengebruik, heapgeheugen dat te groot is en abnormale garbagecollection abnormaal (te vaak of niet frequent genoeg). Zie quickstart: Azure Spring Apps-apps bewaken met logboeken, metrische gegevens en tracering voor meer informatie.
Geheugengebruik van app
Het geheugengebruik van de app is een percentage dat gelijk is aan het app-geheugen dat wordt gebruikt door de geheugenlimiet van de app. Deze waarde toont het hele app-geheugen.
jvm.memory.used/commit/max
Voor JVM-geheugen zijn er drie metrische gegevens: jvm.memory.used
, jvm.memory.committed
en jvm.memory.max
, die worden beschreven in de volgende lijst.
'JVM-geheugen' is geen duidelijk gedefinieerd concept. jvm.memory
Hier is de som van heap geheugen en voormalig permGen deel van niet-heap geheugen. JVM-geheugen bevat geen direct geheugen of ander geheugen, zoals de threadstack. Spring Boot Actuator verzamelt deze drie metrische gegevens en bepaalt het bereik van jvm.memory
.
jvm.memory.used
is de hoeveelheid gebruikt JVM-geheugen, inclusief gebruikte heap-geheugen en gebruikt voormalig permGen in niet-heap-geheugen.jvm.memory.used
is een belangrijke weerspiegeling van de verandering van heap-geheugen, omdat het voormalige permGen-onderdeel meestal stabiel is.Als u te groot vindt
jvm.memory.used
, kunt u overwegen om een kleinere maximale heap-geheugengrootte in te stellen.jvm.memory.committed
is de hoeveelheid geheugen die is vastgelegd voor de JVM die moet worden gebruikt. De grootte vanjvm.memory.committed
is in feite de limiet van bruikbaar JVM-geheugen.jvm.memory.max
is de maximale hoeveelheid JVM-geheugen, niet te verwarren met de werkelijke beschikbare hoeveelheid.De waarde van
jvm.memory.max
kan soms verwarrend zijn omdat deze veel hoger kan zijn dan het beschikbare app-geheugen. Ter verduidelijking,jvm.memory.max
is de som van alle maximale grootten van heap geheugen en het voormalige permGen deel van niet-heap geheugen, ongeacht het echte beschikbare geheugen. Als een app bijvoorbeeld is ingesteld met 1 GB geheugen in de Azure Spring Apps-portal, is de standaard heap-geheugengrootte 0,5 GB. Zie de sectie Standaard maximale heapgrootte van Java-geheugenbeheer voor meer informatie.Als de standaard gecomprimeerde klasseruimte 1 GB is, is de waarde
jvm.memory.max
groter dan 1,5 GB, ongeacht of de grootte van het app-geheugen 1 GB is. Zie Voor meer informatie Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide: Other Considerations in the Oracle documentation.
jvm.gc.memory.allocated/gepromoveerd
Deze twee metrische gegevens zijn bedoeld voor het observeren van java garbagecollection (GC). Zie de sectie Java garbagecollection van Java-geheugenbeheer voor meer informatie. De maximale heapgrootte is van invloed op de frequentie van secundaire GC en volledige GC. De maximale metaspace en maximale directe geheugengrootte beïnvloeden volledige GC. Als u de frequentie van garbagecollection wilt aanpassen, kunt u overwegen de volgende maximale geheugengrootten te wijzigen.
jvm.gc.memory.allocated
is de hoeveelheid toename in de grootte van de geheugengroep van de jonge generatie na één GC en vóór de volgende. Deze waarde weerspiegelt secundaire GC.jvm.gc.memory.promoted
is de hoeveelheid toename in de grootte van de geheugengroep van de oude generatie na GC. Deze waarde weerspiegelt de volledige GC.
U vindt deze functie in Azure Portal, zoals wordt weergegeven in de volgende schermopname. U kunt specifieke metrische gegevens kiezen en filters toevoegen voor een specifieke app, implementatie of instantie. U kunt ook splitsen toepassen.
Verdere foutopsporing
Voor verdere foutopsporing kunt u handmatig heapdumps en threaddumps vastleggen en Java Flight Recorder (JFR) gebruiken. Zie Capture heapdump en threaddump handmatig en gebruik Java Flight Recorder in Azure Spring Apps voor meer informatie.
Heap-dumps registreren de status van het Java-heap-geheugen. Threaddumps registreren de stapels van alle live threads. Deze hulpprogramma's zijn beschikbaar via de Azure CLI en op de app-pagina van Azure Portal, zoals wordt weergegeven in de volgende schermopname.
Zie Capture heapdump en threaddump handmatig en gebruik Java Flight Recorder in Azure Spring Apps voor meer informatie. U kunt ook hulpprogramma's van derden zoals Memory Analyzer gebruiken om heapdumps te analyseren.
Configuraties wijzigen om problemen op te lossen
Sommige problemen die u kunt identificeren, zijn container-OOM, heapgeheugen dat te groot is en abnormale garbagecollection. Als u een van deze problemen identificeert, moet u mogelijk de maximale geheugengrootte configureren in de JVM-opties. Zie de sectie Belangrijke JVM-opties van Java-geheugenbeheer voor meer informatie.
U kunt de JVM-opties wijzigen met behulp van Azure Portal of de Azure CLI.
Navigeer in Azure Portal naar uw app en selecteer Vervolgens Configuratie in de sectie Instellingen van het navigatiemenu. Werk op het tabblad Algemene instellingen het veld JVM-opties bij, zoals wordt weergegeven in de volgende schermopname: