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ó:
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.