Problémy s restartováním aplikace způsobené problémy s nedostatkem paměti
Poznámka:
Plány Basic, Standard a Enterprise budou od poloviny března 2025 vyřazeny ze 3letého období vyřazení. Doporučujeme přejít na Azure Container Apps. Další informace najdete v oznámení o vyřazení Azure Spring Apps.
Od 30. září 2024 bude od 30. září 2024 zastaralý plán s úplným vypnutím po šesti měsících. Doporučujeme přejít na Azure Container Apps. Další informace najdete v tématu Migrace spotřeby Azure Spring Apps Úrovně Standard a vyhrazeného plánu do Azure Container Apps.
Tento článek se vztahuje na:✅ Basic/Standard ✅ Enterprise
Tento článek popisuje problémy s nedostatkem paměti (OOM) pro aplikace Java v Azure Spring Apps.
Typy problémů s nedostatkem paměti
Existují dva typy problémů s nedostatkem paměti: OOM kontejneru a OOM JVM.
Kontejner OOM, označovaný také jako systémový objekt OOM, nastane, když dojde k nedostatku dostupné paměti aplikace. Problém s objektem OOM kontejneru způsobuje události restartování aplikace, které jsou hlášeny v části Resource Health na webu Azure Portal. Za normálních okolností je objekt OOM kontejneru způsoben nesprávnými konfiguracemi velikosti paměti.
Prostředí JVM OOM nastane, když množství využité paměti dosáhlo maximální velikosti nastavené v možnostech JVM. JVM OOM nezpůsobí restartování aplikace. JVM OOM je obvykle výsledkem chybného kódu, který můžete najít vyhledáním
java.lang.OutOfMemoryError
výjimek v protokolu aplikace. JVM OOM má negativní vliv na aplikace a nástroje pro profilaci Javy, jako je Java Flight Recorder.
Tento článek se zaměřuje na řešení problémů s objekty OOM kontejneru. Pokud chcete vyřešit problémy S OOM prostředí JVM, zkontrolujte nástroje, jako jsou výpis paměti haldy, výpis vlákna a Nástroj Java Flight Recorder. Další informace najdete v tématu Zachycení výpisu paměti haldy a výpisu vláken ručně a použití nástroje Java Flight Recorder v Azure Spring Apps.
Řešení problémů s restartováním aplikace kvůli OOM
Následující části popisují nástroje, metriky a možnosti prostředí JVM, které můžete použít k diagnostice a opravě problémů s objekty OOM kontejneru.
Zobrazení upozornění na stránce Resource Health
Na stránce Resource Health na webu Azure Portal se zobrazují události restartování aplikace kvůli objektu OOM kontejneru, jak je znázorněno na následujícím snímku obrazovky:
Konfigurace velikosti paměti
Metriky Využitíjvm.memory.used
paměti aplikace a jvm.memory.committed
poskytují zobrazení využití paměti. Další informace najdete v části Metriky nástroje pro řešení problémů s pamětí. Nakonfigurujte maximální velikost paměti v možnostech prostředí JVM, abyste měli jistotu, že je paměť pod limitem.
Součet maximální velikosti paměti všech částí v modelu paměti Java by měl být menší než skutečná dostupná paměť aplikace. Pokud chcete nastavit maximální velikost paměti, podívejte se na typické rozložení paměti popsané v části Rozložení využití paměti v jazyce Java.
Když nastavíte maximální velikost paměti, najděte rovnováhu. Když nastavíte příliš vysokou velikost maximální paměti, hrozí riziko OOM kontejneru. Když nastavíte příliš malou maximální velikost paměti, hrozí riziko, že prostředí JVM OOM bude mít a zpomalí aplikaci uvolňování paměti.
Řízení paměti haldy
Maximální velikost haldy můžete nastavit pomocí -Xms
možností , -Xmx
, -XX:InitialRAMPercentage
a -XX:MaxRAMPercentage
JVM.
Pokud je hodnota jvm.memory.used
příliš vysoká v metrikách, budete možná muset upravit nastavení maximální velikosti haldy. Další informace najdete v části jvm.memory.used/committed/max nástroje pro řešení problémů s pamětí.
Řízení přímé paměti
Možnost JVM je důležité nastavit -XX:MaxDirectMemorySize
z následujících důvodů:
- Nemusíte si všimnout, když architektury, jako je nio a gzip, používají přímou paměť.
- Uvolňování paměti s přímým přístupem se zpracovává pouze během úplného uvolňování paměti a úplné uvolňování paměti nastane pouze v případě, že halda je téměř plná.
Za normálních okolností můžete nastavit MaxDirectMemorySize
hodnotu menší než velikost paměti aplikace minus paměť haldy minus paměť bez haldy.
Řízení metaprostoru
Maximální velikost metaprostoru můžete nastavit nastavením -XX:MaxMetaspaceSize
možnosti JVM. Tato -XX:MetaspaceSize
možnost nastaví prahovou hodnotu pro aktivaci úplného uvolňování paměti.
Paměť metaprostoru je obvykle stabilní.