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


Memóriakihasználtság miatti alkalmazás-újraindítási problémák

Feljegyzés

Az Alapszintű, a Standard és a Nagyvállalati csomag 2025. március közepétől megszűnik, 3 éves nyugdíjazási időszakkal. Javasoljuk, hogy váltson az Azure Container Appsre. További információkért lásd az Azure Spring Apps kivonási bejelentését.

A standard felhasználás és a dedikált csomag 2024. szeptember 30-tól megszűnik, hat hónap után pedig teljes leállítással. Javasoljuk, hogy váltson az Azure Container Appsre. További információ: Azure Spring Apps Standard-használat migrálása és dedikált csomag az Azure Container Appsbe.

Ez a cikk a következőre vonatkozik: ✔️ Basic/Standard ✔️ Enterprise

Ez a cikk az Azure Spring Apps java-alkalmazásaihoz kapcsolódó memóriahiányos (OOM-) problémákat ismerteti.

A memóriakihasználtság problémáinak típusai

A memóriahiányos problémáknak két típusa van: a tároló OOM-ja és a JVM OOM.

  • A tároló OOM(más néven rendszerszintű OOM) akkor fordul elő, ha a rendelkezésre álló alkalmazásmemória elfogy. A tároló OOM-hibája alkalmazás-újraindítási eseményeket okoz, amelyek az Azure Portal Resource Health szakaszában jelennek meg. A tároló OOM-ját általában helytelen memóriaméret-konfigurációk okozzák.

  • A JVM OOM akkor fordul elő, ha a felhasznált memória mennyisége elérte a JVM-beállításokban beállított maximális méretet. A JVM OOM nem okozza az alkalmazások újraindítását. A JVM OOM általában hibás kód eredménye, amelyet az alkalmazásnapló kivételeinek keresésével java.lang.OutOfMemoryError talál. A JVM OOM negatív hatással van az alkalmazásra és a Java Profilkészítési eszközökre, például a Java Flight Recorderre.

Ez a cikk a tároló OOM-problémáinak megoldására összpontosít. A JVM OOM-problémák megoldásához ellenőrizze az eszközöket, például a halomképet, a szálképet és a Java Flight Recordert. További információ: Halommemóta és szálkép manuális rögzítése és a Java Flight Recorder használata az Azure Spring Appsben.

Az alkalmazás újraindítási problémáinak elhárítása az OOM miatt

A következő szakaszok ismertetik azokat az eszközöket, metrikákat és JVM-beállításokat, amelyekkel diagnosztizálhatja és kijavíthatja a tároló OOM-problémáit.

Riasztások megtekintése az Erőforrás állapota lapon

Az Azure Portal Erőforrás-állapot lapján az alkalmazás újraindítási eseményei láthatók a tároló OOM-jának köszönhetően, ahogyan az alábbi képernyőképen látható:

Képernyőkép az Azure Portalról, amelyen az Azure Spring Apps Resource Health oldala látható, kiemelt OOM-üzenettel.

Memóriaméret konfigurálása

A metrikák alkalmazásmemória-használat, jvm.memory.usedés jvm.memory.committed a memóriahasználat nézetét biztosítják. További információ: Eszközök metrikák szakasza a memóriaproblémák elhárításához. Konfigurálja a maximális memóriaméretet a JVM-beállításokban, hogy a memória a korlát alatt legyen.

A Java-memóriamodell összes részének maximális memóriaméretének kisebbnek kell lennie, mint a valós rendelkezésre álló alkalmazásmemória. A maximális memóriaméret beállításához tekintse meg a Java memóriakezelés memóriahasználat-elrendezési szakaszában ismertetett tipikus memóriaelrendezést.

A maximális memóriaméret beállításakor keressen egy egyenleget. Ha túl magasra állítja a memória maximális méretét, fennáll a tároló OOM-jának kockázata. Ha túl alacsonyra állítja a maximális memóriaméretet, fennáll a JVM OOM kockázata, és a szemétgyűjtés leáll, és lelassítja az alkalmazást.

Halommemória szabályozása

A maximális halomméretet a -Xms, -Xmx, -XX:InitialRAMPercentage, és -XX:MaxRAMPercentage JVM beállításokkal állíthatja be.

Előfordulhat, hogy módosítania kell a halomméret maximális beállításait, ha az érték jvm.memory.used túl magas a metrikákban. További információkért lásd az Eszközök jvm.memory.used/committed/max szakaszát a memóriaproblémák elhárításához.

Közvetlen memória szabályozása

Fontos, hogy a JVM-beállítást a -XX:MaxDirectMemorySize következő okokból állítsa be:

  • Előfordulhat, hogy nem veszi észre, hogy az olyan keretrendszerek, mint a nio vagy a gzip, közvetlen memóriát használnak.
  • A közvetlen memória szemétgyűjtése csak a teljes szemétgyűjtés során történik, a teljes szemétgyűjtés pedig csak akkor történik, ha a halom majdnem megtelt.

Általában az alkalmazás memóriaméreténél kisebb értéket állíthat be MaxDirectMemorySize , mínusz a halommemória mínusz a nem halommemória.

Metatér szabályozása

A maximális metatérméretet a -XX:MaxMetaspaceSize JVM beállítás beállításával állíthatja be. A -XX:MetaspaceSize beállítás a küszöbértéket úgy állítja be, hogy teljes szemétgyűjtést aktiváljon.

A metatér memória általában stabil.

Lásd még