Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kommentar
Planerna Basic, Standardoch Enterprise gick in i en pensionsperiod den 17 mars 2025. Mer information finns i meddelandet om azure Spring Apps-pensionering.
Planen Standard consumption och den dedikerade gick in i en pensionsperiod den 30 september 2024, med en fullständig avstängning i slutet av mars 2025. Mer information finns i Migrera Azure Spring Apps standardförbrukning och dedikerad plan till Azure Container Apps.
Den här artikeln gäller för:✅ Basic/Standard ✅ Enterprise
Den här artikeln beskriver OOM-problem (out-of-memory) för Java-program i Azure Spring Apps.
Typer av problem med slut på minne
Det finns två typer av problem med minnesbrist: container-OOM och JVM OOM.
Container-OOM, även kallat system-OOM, inträffar när det tillgängliga appminnet har tagit slut. Problem med container-OOM orsakar omstartshändelser för appar, som rapporteras i avsnittet Resource Health i Azure Portal. Normalt orsakas container-OOM av felaktiga konfigurationer av minnesstorlek.
JVM OOM inträffar när mängden använt minne har nått den maximala storleken som anges i JVM-alternativ. JVM OOM gör inte att en app startas om. Normalt är JVM OOM ett resultat av felaktig kod, som du kan hitta genom att söka
java.lang.OutOfMemoryError
efter undantag i programloggen. JVM OOM har en negativ effekt på program- och Java-profileringsverktyg, till exempel Java Flight Recorder.
Den här artikeln fokuserar på hur du åtgärdar problem med container-OOM. Om du vill åtgärda JVM OOM-problem kontrollerar du verktyg som heap-dump, tråddump och Java Flight Recorder. Mer information finns i Avbilda heap dump och tråddumpning manuellt och använd Java Flight Recorder i Azure Spring Apps.
Åtgärda problem med omstart av appar på grund av OOM
I följande avsnitt beskrivs de verktyg, mått och JVM-alternativ som du kan använda för att diagnostisera och åtgärda problem med container-OOM.
Visa aviseringar på sidan Resurshälsa
Sidan Resurshälsa på Azure Portal visar händelser för omstart av appen på grund av containerns OOM, enligt följande skärmbild:
Konfigurera minnesstorlek
Måtten Appminnesanvändning, jvm.memory.used
och jvm.memory.committed
ger en vy över minnesanvändning. Mer information finns i avsnittet Mått i Verktyg för att felsöka minnesproblem. Konfigurera de maximala minnesstorlekarna i JVM-alternativen för att säkerställa att minnet ligger under gränsen.
Summan av de maximala minnesstorlekarna för alla delar i Java-minnesmodellen ska vara mindre än det verkliga tillgängliga appminnet. Om du vill ange maximala minnesstorlekar kan du läsa den typiska minneslayouten som beskrivs i avsnittet Minnesanvändningslayout i Java-minneshantering.
Hitta en balans när du anger den maximala minnesstorleken. När du anger den maximala minnesstorleken för hög finns det en risk för containerns OOM. När du anger den maximala minnesstorleken för lågt finns det en risk för JVM OutOfMemoryError, och skräpinsamlingen kommer att påverkas och kommer att sakta ned appen.
Kontrollera heapminne
Du kan ange den maximala heapstorleken med hjälp av JVM-alternativen -Xms
, -Xmx
, -XX:InitialRAMPercentage
och -XX:MaxRAMPercentage
.
Du kan behöva justera inställningarna för maximal heap när värdet av jvm.memory.used
är för högt i metrik. Mer information finns i avsnittet jvm.memory.used/committed/max i Verktyg för att felsöka minnesproblem.
Kontrollera direktminne
Det är viktigt att ange -XX:MaxDirectMemorySize
JVM-alternativet av följande skäl:
- Du kanske inte märker när ramverk som nio och gzip använder direkt minne.
- Avfallshantering av direktminne utförs endast under en fullständig avfallshantering, och en fullständig avfallshantering sker endast när högen nästan är full.
Normalt kan du ange MaxDirectMemorySize
ett värde som är mindre än appens minnesstorlek minus heapminnet minus minnet som inte är heapminnet.
Kontrollera metaområde
Du kan ställa in den maximala metarymdsstorleken genom JVM-alternativet -XX:MaxMetaspaceSize
. Alternativet -XX:MetaspaceSize
anger tröskelvärdet för att utlösa fullständig skräpinsamling.
Metaområdesminnet är vanligtvis stabilt.