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 create
opdrachten en up
update
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)