Efektivní využití paměti pro aplikace v Javě v Azure Container Apps (Preview)
Virtuální počítač Java (JVM) používá paměť konzervativně, protože předpokládá, že paměť operačního systému musí být sdílena mezi více aplikacemi. Vaše aplikace kontejneru ale může optimalizovat využití paměti a zpřístupnit pro vaši aplikaci maximální velikost paměti. Tato optimalizace paměti se označuje jako automatické přizpůsobení paměti v Javě. Pokud je povolené přizpůsobení paměti, výkon aplikace v Javě se obvykle vylepšuje mezi 10 % a 20 % bez jakýchkoli změn kódu.
Azure Container Apps poskytuje automatické přizpůsobení paměti za následujících okolností:
- V kontejneru běží jedna aplikace v Javě.
- Vaše aplikace se nasadí ze zdrojového kódu nebo souboru JAR.
Automatické přizpůsobení paměti je ve výchozím nastavení povolené, ale můžete ho zakázat ručně.
Zakažte přizpůsobení paměti.
Automatické přizpůsobení paměti je užitečné ve většině scénářů, ale nemusí být ideální pro všechny situace. Přizpůsobení paměti můžete vypnout ručně nebo automaticky.
Ruční zakázání
Pokud chcete při vytváření aplikace kontejneru zakázat přizpůsobení paměti, nastavte proměnnou BP_JVM_FIT
prostředí na false
hodnotu .
Následující příklady ukazují, jak pomocí příkazu , up
a update
příkazy zakázat přizpůsobení create
paměti.
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--image <CONTAINER_IMAGE_LOCATION> \
--environment <ENVIRONMENT_NAME> \
--env-vars BP_JVM_FIT="false"
Pokud chcete ověřit, že je instalace paměti zakázaná, zkontrolujte v protokolech následující zprávu:
Zakázání fitování paměti jvm, důvod: ruční zakázání
Automatické zakázání
Pokud jsou splněny některé z následujících podmínek, je při splnění některé z následujících podmínek automaticky zakázáno přizpůsobení paměti:
Omezená paměť kontejneru: Paměť kontejneru je menší než 1 GB.
Explicitně nastavit možnosti paměti: Pokud je jedno nebo více nastavení paměti zadáno v proměnných prostředí prostřednictvím
JAVA_TOOL_OPTIONS
. Možnosti nastavení paměti zahrnují následující hodnoty:-XX:MaxRAMPercentage
-XX:MinRAMPercentage
-XX:InitialRAMPercentage
-XX:MaxMetaspaceSize
-XX:MetaspaceSize
-XX:ReservedCodeCacheSize
-XX:MaxDirectMemorySize
-Xmx
-Xms
-Xss
Pokud například zadáte maximální velikost haldy v proměnné prostředí, jak je znázorněno v následujícím příkladu, je přizpůsobení paměti automaticky zakázáno:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"
Při zakázaném zapadající paměti se do protokolu zobrazí následující výstup zprávy:
Zakázání přizpůsobení paměti jvm, důvod: použijte nastavení zadaná v JAVA_TOOL_OPTIONS=-Xmx512m místo toho vyzvednuta JAVA_TOOL_OPTIONS: -Xmx512m
Malá velikost paměti bez haldy: Vzácné případy, kdy je počítaná velikost haldy nebo neheap příliš malá (menší než 200 MB).
Ověření povolení přizpůsobení paměti
Zkontrolujte stream protokolu během spouštění a vyhledejte zprávu, která odkazuje na konfiguraci paměti počítaný JVM.
Tady je příklad výstupu zprávy během spuštění.
Vypočítaná konfigurace paměti JVM: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (celková paměť: 2G, počet vláken: 250, načtený počet tříd: 12924, hlavní místnost: 0 %)
Vyzvednuto JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
Konfigurace modulu runtime
Proměnné prostředí můžete nastavit tak, aby ovlivnily chování přizpůsobení paměti.
Proměnná | Unit | Příklad | Popis |
---|---|---|---|
BPL_JVM_HEAD_ROOM |
Procento | BPL_JVM_HEAD_ROOM=5 |
Nechte paměťový prostor pro systém na základě daného procenta. |
BPL_JVM_THREAD_COUNT |
Počet | BPL_JVM_THREAD_COUNT=200 |
Odhadovaný maximální počet vláken. |
BPL_JVM_CLASS_ADJUSTMENT |
Počet Procento |
BPL_JVM_CLASS_ADJUSTMENT=10000 BPL_JVM_CLASS_ADJUSTMENT="10%" |
Upravte počet tříd JVM podle explicitní hodnoty nebo procenta. |
Poznámka:
Změna těchto proměnných nezakazuje automatické přizpůsobení paměti.
Upozornění na nedostatek paměti
Pokud se rozhodnete nakonfigurovat nastavení paměti sami, riskujete, že dojde k upozornění na nedostatek paměti.
Tady je několik možných důvodů, proč by kontejneru mohlo docházet k nedostatku paměti:
Paměť haldy je větší než celková dostupná paměť.
Paměť bezheapu je větší než celková dostupná paměť.
Halda + paměť bezheapu je větší než celková dostupná paměť.
Pokud váš kontejner vyčerpá paměť, zobrazí se následující upozornění:
Upozornění OOM: Paměť haldy 1200M je větší než 1G k dispozici pro přidělení (-Xmx1200M)