Megosztás a következőn keresztül:


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)

Következő lépések