Delen via


Geheugen efficiënt gebruiken voor Java-apps in Azure Container Apps (preview)

De Java Virtual Machine (JVM) gebruikt geheugen conservatief omdat wordt ervan uitgegaan dat het besturingssysteemgeheugen moet worden gedeeld tussen meerdere toepassingen. Uw container-app kan echter het geheugengebruik optimaliseren en de maximale hoeveelheid geheugen beschikbaar maken voor uw toepassing. Deze geheugenoptimalisatie wordt ook wel automatische geheugenfitting van Java genoemd. Wanneer geheugenaanpassing is ingeschakeld, worden de prestaties van Java-toepassingen doorgaans verbeterd tussen 10% en 20% zonder codewijzigingen.

Azure Container Apps biedt automatische geheugenfitting onder de volgende omstandigheden:

  • Eén Java-toepassing wordt uitgevoerd in een container.
  • Uw toepassing wordt geïmplementeerd vanuit broncode of een JAR-bestand.

Automatische geheugenfitting is standaard ingeschakeld, maar u kunt handmatig uitschakelen.

Geheugen passend maken uitschakelen

Automatische geheugenfitting is handig in de meeste scenario's, maar het is mogelijk niet ideaal voor alle situaties. U kunt geheugen passend maken handmatig of automatisch uitschakelen.

Handmatig uitschakelen

Als u geheugenfitting wilt uitschakelen wanneer u uw container-app maakt, stelt u de omgevingsvariabele BP_JVM_FIT in op false.

In de volgende voorbeelden ziet u hoe u geheugenfitting kunt uitschakelen met de createopdrachten en upupdate opdrachten.

az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --image <CONTAINER_IMAGE_LOCATION> \
  --environment <ENVIRONMENT_NAME> \
  --env-vars BP_JVM_FIT="false" 

Als u wilt controleren of de geheugenfitting is uitgeschakeld, controleert u de logboeken op het volgende bericht:

Jvm geheugen passend maken, reden: handmatig uitgeschakeld

Automatisch uitschakelen

Geheugenfitting wordt automatisch uitgeschakeld wanneer aan een van de volgende voorwaarden wordt voldaan:

  • Beperkt containergeheugen: Containergeheugen is minder dan 1 GB.

  • Expliciet geheugenopties instellen: wanneer een of meer geheugeninstellingen zijn opgegeven in omgevingsvariabelen via JAVA_TOOL_OPTIONS. Opties voor geheugeninstellingen bevatten de volgende waarden:

    • -XX:MaxRAMPercentage
    • -XX:MinRAMPercentage
    • -XX:InitialRAMPercentage
    • -XX:MaxMetaspaceSize
    • -XX:MetaspaceSize
    • -XX:ReservedCodeCacheSize
    • -XX:MaxDirectMemorySize
    • -Xmx
    • -Xms
    • -Xss

    Geheugenaanpassen worden bijvoorbeeld automatisch uitgeschakeld als u de maximale heapgrootte in een omgevingsvariabele opgeeft, zoals in het volgende voorbeeld wordt weergegeven:

    az containerapp update \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --image <CONTAINER_IMAGE_LOCATION>  \
      --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m" 
    

    Als geheugen passend is uitgeschakeld, ziet u de volgende berichtuitvoer in het logboek:

    Jvm memory fitting uitschakelen, reden: gebruik instellingen die zijn opgegeven in JAVA_TOOL_OPTIONS=-Xmx512m in plaats daarvan opgehaald JAVA_TOOL_OPTIONS: -Xmx512m

  • Kleine niet-heap geheugengrootte: zeldzame gevallen wanneer de berekende grootte van heap of niet-heap te klein is (minder dan 200 MB).

Controleren of geheugen passend is

Inspecteer uw logboekstream tijdens het opstarten voor een bericht dat verwijst naar berekende JVM-geheugenconfiguratie.

Hier volgt een voorbeeld van een berichtuitvoer tijdens het opstarten.

Berekende JVM-geheugenconfiguratie: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (Total Memory: 2G, Thread Count: 250, Loaded Class Count: 12924, Headroom: 0%)

Opgehaald JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M

Runtimeconfiguratie

U kunt omgevingsvariabelen instellen om het gedrag van de geheugenaanpassen te beïnvloeden.

Variabel Eenheid Opmerking Beschrijving
BPL_JVM_HEAD_ROOM Percentage BPL_JVM_HEAD_ROOM=5 Laat geheugenruimte voor het systeem op basis van het opgegeven percentage.
BPL_JVM_THREAD_COUNT Aantal BPL_JVM_THREAD_COUNT=200 Het geschatte maximum aantal threads.
BPL_JVM_CLASS_ADJUSTMENT Aantal
Percentage
BPL_JVM_CLASS_ADJUSTMENT=10000
BPL_JVM_CLASS_ADJUSTMENT="10%"
Pas het aantal JVM-klassen aan op expliciete waarde of percentage.

Notitie

Als u deze variabelen wijzigt, wordt automatische geheugenfitting niet uitgeschakeld.

Waarschuwing over onvoldoende geheugen

Als u besluit de geheugeninstellingen zelf te configureren, loopt u het risico dat er een waarschuwing voor onvoldoende geheugen optreedt.

Hier volgen enkele mogelijke redenen waarom uw container onvoldoende geheugen heeft:

  • Heap-geheugen is groter dan het totale beschikbare geheugen.

  • Niet-heapgeheugen is groter dan het totale beschikbare geheugen.

  • Heap + niet-geheugen is groter dan het totale beschikbare geheugen.

Als uw container onvoldoende geheugen heeft, wordt de volgende waarschuwing weergegeven:

OOM-waarschuwing: heapgeheugen 1200M is groter dan 1G beschikbaar voor toewijzing (-Xmx1200M)

Volgende stappen