Nástroje pro řešení potíží s pamětí
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 různé nástroje, které jsou užitečné pro řešení potíží s pamětí Java. Tyto nástroje můžete použít v mnoha scénářích, které nejsou omezené na problémy s pamětí, ale tento článek se zaměřuje pouze na téma paměti.
Výstrahy a diagnostika
Následující části popisují výstrahy a diagnostiku služby Resource Health dostupné prostřednictvím webu Azure Portal.
Stav prostředků
Můžete monitorovat události životního cyklu aplikací a nastavit upozornění pomocí protokolu aktivit Azure a služby Azure Service Health. Další informace najdete v tématu Monitorování událostí životního cyklu aplikace pomocí protokolu aktivit Azure a služby Azure Service Health.
Služba Resource Health odesílá upozornění na události restartování aplikace kvůli problémům s nedostatkem paměti kontejneru (OOM). Další informace najdete v tématu Problémy s restartováním aplikace způsobené problémy s nedostatkem paměti.
Následující snímek obrazovky ukazuje upozornění služby App Resource Health označující problém S OOM.
Diagnóza a řešení problémů
Diagnostika Azure Spring Apps je interaktivní prostředí pro řešení potíží s aplikací bez konfigurace. Další informace najdete v tématu Samoobslužná diagnostika a řešení problémů v Azure Spring Apps.
Na webu Azure Portal najdete využití paměti v části Diagnostika a řešení problémů, jak je znázorněno na následujícím snímku obrazovky.
Využití paměti poskytuje jednoduchou diagnostiku využití paměti aplikace, jak je znázorněno na následujícím snímku obrazovky.
Metriky
Následující části popisují metriky, které pokrývají problémy, včetně vysokého využití paměti, příliš velké paměti haldy a neobvyklého uvolňování paměti (příliš časté nebo příliš časté). Další informace najdete v tématu Rychlý start: Monitorování aplikací Azure Spring Apps pomocí protokolů, metrik a trasování.
Využití paměti aplikace
Využití paměti aplikace je procento, které se rovná paměti aplikace použité vydělené limitem paměti aplikace. Tato hodnota zobrazuje celou paměť aplikace.
jvm.memory.used/committed/max
Pro paměť JVM existují tři metriky: jvm.memory.used
, jvm.memory.committed
a jvm.memory.max
, které jsou popsány v následujícím seznamu.
"Paměť JVM" není jasně definovaný koncept.
jvm.memory
Tady je součet paměti haldy a bývalé permGen části paměti bez haldy. Paměť JVM nezahrnuje přímou paměť ani jinou paměť, jako je zásobník vláken. Ovladač Spring Boot shromažďuje tyto tři metriky a určuje rozsah jvm.memory
.
jvm.memory.used
je množství využité paměti JVM, včetně využité paměti haldy a použité bývalé permGen v paměti bez haldy.jvm.memory.used
je hlavním odrazem změny paměti haldy, protože bývalá část permGen je obvykle stabilní.Pokud najdete
jvm.memory.used
příliš velkou velikost, zvažte nastavení menší maximální velikosti paměti haldy.jvm.memory.committed
je velikost paměti potvrzené pro použití prostředí JVM.jvm.memory.committed
Velikost je v podstatě limit využitelné paměti JVM.jvm.memory.max
je maximální množství paměti JVM, nezaměňovat s skutečnou dostupnou částkou.Hodnota
jvm.memory.max
může být někdy matoucí, protože může být mnohem vyšší než dostupná paměť aplikace. Abychom to vysvětlili,jvm.memory.max
je součet všech maximálních velikostí paměti haldy a bývalé permGen části paměti bez haldy bez ohledu na skutečnou dostupnou paměť. Pokud je například aplikace nastavená s 1 GB paměti na portálu Azure Spring Apps, je výchozí velikost paměti haldy 0,5 GB. Další informace najdete v části Výchozí maximální velikost haldy správy paměti Java.Pokud je výchozí komprimovaná velikost prostoru třídy 1 GB, je hodnota
jvm.memory.max
větší než 1,5 GB bez ohledu na to, jestli velikost paměti aplikace 1 GB. Další informace najdete v tématu Platforma Java edice Standard Průvodce laděním uvolňování paměti virtuálního počítače HotSpot: Další důležité informace v dokumentaci Oracle.
jvm.gc.memory.allocated/promoted
Tyto dvě metriky slouží k sledování uvolňování paměti Jazyka Java (GC). Další informace najdete v části Uvolňování paměti Jazyka Java v sekci Uvolňování paměti Jazyka Java. Maximální velikost haldy ovlivňuje frekvenci menšího uvolňování paměti a plného uvolňování paměti. Maximální metaprostor a maximální velikost přímé paměti ovlivňují plné uvolňování paměti. Pokud chcete upravit frekvenci uvolňování paměti, zvažte úpravu následujících maximálních velikostí paměti.
jvm.gc.memory.allocated
je množství zvýšení velikosti fondu paměti mladé generace po jednom GC a před další. Tato hodnota odráží menší GC.jvm.gc.memory.promoted
je velikost zvýšení velikosti starého fondu paměti generace po GC. Tato hodnota odráží úplné uvolňování paměti.
Tuto funkci najdete na webu Azure Portal, jak je znázorněno na následujícím snímku obrazovky. Můžete zvolit konkrétní metriky a přidat filtry pro konkrétní aplikaci, nasazení nebo instanci. Rozdělení můžete použít také.
Další ladění
Pro další ladění můžete ručně zachytit výpisy paměti haldy a výpisy vláken a použít Java Flight Recorder (JFR). 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.
Výpisy haldy zaznamenávají stav paměti haldy Java. Výpisy vláken zaznamenávají zásobníky všech živých vláken. Tyto nástroje jsou dostupné prostřednictvím Azure CLI a na stránce aplikace webu Azure Portal, jak je znázorněno na následujícím snímku obrazovky.
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. K analýze výpisů haldy můžete použít také nástroje třetích stran, jako je Analyzátor paměti .
Úprava konfigurací pro řešení problémů
Mezi problémy, které můžete identifikovat, patří OOM kontejneru, paměť haldy, která je příliš velká a abnormální uvolňování paměti. Pokud zjistíte některý z těchto problémů, možná budete muset nakonfigurovat maximální velikost paměti v možnostech prostředí JVM. Další informace najdete v části Důležité možnosti prostředí JVM správy paměti Java.
Možnosti prostředí JVM můžete upravit pomocí webu Azure Portal nebo Azure CLI.
Na webu Azure Portal přejděte do aplikace a pak v části Nastavení navigační nabídky vyberte Možnost Konfigurace. Na kartě Obecné nastavení aktualizujte pole možností prostředí JVM, jak je znázorněno na následujícím snímku obrazovky: