Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ě.
Zakázat nastavování 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 prostředí BP_JVM_FIT na false.
Následující příklady ukazují, jak pomocí příkazů create, up a update zakázat přizpůsobení 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í přizpůsobení paměti jvm, důvod: zakázáno ručně
Automatické zakázání
Pokud jsou splněny některé z následujících podmínek, je 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: Když jsou jedno nebo více nastavení paměti zadána 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ázání přizpůsobení paměti se do protokolu zapíše 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 byla načtena JAVA_TOOL_OPTIONS: -Xmx512m
Malá velikost nehaldy: Vzácné případy, kdy je vypočítaná velikost haldy nebo nehaldy příliš malá (menší než 200 MB).
Ověřte, zda je zapnuto přizpůsobení paměti
Zkontrolujte protokolový stream během spouštění a vyhledejte zprávu, která odkazuje na vypočítanou konfiguraci paměti 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, rezerva: 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í alokace paměti.
| Proměnná | Jednotka | Příklad | Popis |
|---|---|---|---|
BPL_JVM_HEAD_ROOM |
Procento | BPL_JVM_HEAD_ROOM=5 |
Nechte volnou paměť pro systém podle zadané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=10000BPL_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ěť.
Paměť haldy + paměť mimo haldu 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)