Memória hatékony használata Java-alkalmazásokhoz az Azure Container Appsben (előzetes verzió)
A Java virtuális gép (JVM) konzervatív módon használja a memóriát, mivel feltételezi, hogy az operációs rendszer memóriáját több alkalmazás között kell megosztani. A tárolóalkalmazás azonban optimalizálhatja a memóriahasználatot, és a maximális memóriamennyiséget elérhetővé teheti az alkalmazás számára. Ezt a memóriaoptimalizálást Java automatikus memóriaillesztésnek nevezzük. Ha engedélyezve van a memóriaillesztés, a Java-alkalmazások teljesítménye általában 10 és 20% között javul kódváltozások nélkül.
Az Azure Container Apps automatikus memóriaillesztéseket biztosít a következő körülmények között:
- Egyetlen Java-alkalmazás fut egy tárolóban.
- Az alkalmazás forráskódból vagy JAR-fájlból van üzembe helyezve.
Az automatikus memóriaillesztés alapértelmezés szerint engedélyezve van, de manuálisan is letiltható.
Memóriaillesztés letiltása
Az automatikus memóriaillesztés a legtöbb esetben hasznos, de lehet, hogy nem minden helyzetben ideális. A memóriaillesztés manuálisan vagy automatikusan is letiltható.
Manuális letiltás
A tárolóalkalmazás létrehozásakor a memóriaillesztés letiltásához állítsa a környezeti változót BP_JVM_FIT
a következőre false
: .
Az alábbi példák bemutatják, hogyan használhatja a memóriaillesztés letiltását a , up
és update
parancsokkalcreate
.
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--image <CONTAINER_IMAGE_LOCATION> \
--environment <ENVIRONMENT_NAME> \
--env-vars BP_JVM_FIT="false"
Ha ellenőrizni szeretné, hogy a memóriaillesztés le van-e tiltva, ellenőrizze a naplókban a következő üzenetet:
JVM memóriaillesztés letiltása, ok: manuálisan letiltva
Automatikus letiltás
A memóriaillesztés automatikusan le van tiltva, ha az alábbi feltételek bármelyike teljesül:
Korlátozott tárolómemória: A tárolómemória kisebb, mint 1 GB.
Explicit módon állítsa be a memóriabeállításokat: Ha egy vagy több memóriabeállítás van megadva a környezeti változókban a következő módon
JAVA_TOOL_OPTIONS
: . A memóriabeállítások a következő értékeket tartalmazzák:-XX:MaxRAMPercentage
-XX:MinRAMPercentage
-XX:InitialRAMPercentage
-XX:MaxMetaspaceSize
-XX:MetaspaceSize
-XX:ReservedCodeCacheSize
-XX:MaxDirectMemorySize
-Xmx
-Xms
-Xss
A memóriaillesztés például automatikusan le van tiltva, ha megadja a maximális halomméretet egy környezeti változóban, ahogyan az alábbi példában látható:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"
Ha a memóriaillesztés le van tiltva, a következő üzenet kimenete jelenik meg a naplóban:
Jvm memóriaillesztés letiltása, ok: használja a JAVA_TOOL_OPTIONS=-Xmx512m fájlban megadott beállításokat, ehelyett felvette a JAVA_TOOL_OPTIONS: -Xmx512m
Kis nem halom memóriaméret: Ritka esetek, amikor a halom vagy a nem halom számított mérete túl kicsi (200 MB-nál kisebb).
Ellenőrizze, hogy engedélyezve van-e a memória-illesztés
Tekintse át a naplóstreamet az indítás során, és keressen egy üzenetet, amely a számított JVM memóriakonfigurációra hivatkozik.
Íme egy példa üzenetkimenet az indítás során.
Számított JVM memóriakonfiguráció: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (Teljes memória: 2G, Szálszám: 250, Betöltött osztály száma: 12924, Fejtér: 0%)
Felvette a JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
Futtatókörnyezet konfigurálása
A környezeti változók úgy állíthatók be, hogy befolyásolják a memóriaillesztési viselkedést.
Változó | Unit (Egység) | Példa | Leírás |
---|---|---|---|
BPL_JVM_HEAD_ROOM |
Százalék | BPL_JVM_HEAD_ROOM=5 |
Hagyja a rendszer számára a memóriaterületet a megadott százalék alapján. |
BPL_JVM_THREAD_COUNT |
Szám | BPL_JVM_THREAD_COUNT=200 |
A szálak becsült maximális száma. |
BPL_JVM_CLASS_ADJUSTMENT |
Szám Százalék |
BPL_JVM_CLASS_ADJUSTMENT=10000 BPL_JVM_CLASS_ADJUSTMENT="10%" |
Módosítsa a JVM-osztályok számát explicit érték vagy százalék szerint. |
Feljegyzés
A változók módosítása nem tiltja le az automatikus memóriaillesztés használatát.
Memóriakihasználtság figyelmeztetés
Ha úgy dönt, hogy saját maga konfigurálja a memóriabeállításokat, fennáll a memóriakihasználtságra vonatkozó figyelmeztetés kockázata.
Az alábbiakban néhány lehetséges okot talál arra, hogy miért fogyhat el a tároló memóriája:
A halommemória nagyobb, mint a teljes rendelkezésre álló memória.
A nonheap memória nagyobb, mint a teljes rendelkezésre álló memória.
A halom + a nem iktatja memória nagyobb, mint a teljes rendelkezésre álló memória.
Ha a tároló memóriája elfogy, a következő figyelmeztetést fogja tapasztalni:
OOM-figyelmeztetés: a halommemória 1200M-nél nagyobb, mint 1G rendelkezésre áll a foglaláshoz (-Xmx1200M)