Wydajne używanie pamięci dla aplikacji Java w usłudze Azure Container Apps (wersja zapoznawcza)
Maszyna wirtualna Java (JVM) używa pamięci konserwatywnie, ponieważ zakłada, że pamięć systemu operacyjnego musi być współdzielona między wieloma aplikacjami. Jednak aplikacja kontenera może zoptymalizować użycie pamięci i udostępnić aplikację maksymalną ilość pamięci. Ta optymalizacja pamięci jest znana jako automatyczne dopasowywanie pamięci w języku Java. Po włączeniu dopasowania pamięci wydajność aplikacji Java jest zwykle większa w zakresie od 10% do 20% bez żadnych zmian w kodzie.
Usługa Azure Container Apps zapewnia automatyczne dopasowywanie pamięci w następujących okolicznościach:
- Jedna aplikacja Java działa w kontenerze.
- Aplikacja jest wdrażana z kodu źródłowego lub pliku JAR.
Automatyczne dopasowywanie pamięci jest domyślnie włączone, ale można je wyłączyć ręcznie.
Wyłączanie montażu pamięci
Automatyczne dopasowywanie pamięci jest przydatne w większości scenariuszy, ale może nie być idealne dla wszystkich sytuacji. Można wyłączyć ręczne lub automatyczne dopasowywanie pamięci.
Wyłączanie ręczne
Aby wyłączyć dopasowywanie pamięci podczas tworzenia aplikacji kontenera, ustaw zmienną środowiskową BP_JVM_FIT
na false
wartość .
W poniższych przykładach pokazano, jak używać wyłączania dopasowania pamięci za pomocą create
poleceń , up
i update
.
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--image <CONTAINER_IMAGE_LOCATION> \
--environment <ENVIRONMENT_NAME> \
--env-vars BP_JVM_FIT="false"
Aby sprawdzić, czy dopasowanie pamięci jest wyłączone, sprawdź dzienniki pod kątem następującego komunikatu:
Wyłączenie montażu pamięci jvm, przyczyna: ręcznie wyłączone
Automatyczne wyłączanie
Dopasowanie pamięci jest automatycznie wyłączone po spełnieniu dowolnego z następujących warunków:
Ograniczona pamięć kontenera: pamięć kontenera jest mniejsza niż 1 GB.
Jawne ustawianie opcji pamięci: jeśli co najmniej jedno ustawienie pamięci jest określone w zmiennych środowiskowych za pośrednictwem programu
JAVA_TOOL_OPTIONS
. Opcje ustawienia pamięci obejmują następujące wartości:-XX:MaxRAMPercentage
-XX:MinRAMPercentage
-XX:InitialRAMPercentage
-XX:MaxMetaspaceSize
-XX:MetaspaceSize
-XX:ReservedCodeCacheSize
-XX:MaxDirectMemorySize
-Xmx
-Xms
-Xss
Na przykład dopasowanie pamięci jest automatycznie wyłączone, jeśli określisz maksymalny rozmiar sterty w zmiennej środowiskowej, jak pokazano w poniższym przykładzie:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"
Po wyłączeniu dopasowania pamięci w dzienniku są wyświetlane następujące dane wyjściowe komunikatu:
Wyłączenie montażu pamięci jvm, przyczyna: użyj ustawień określonych w JAVA_TOOL_OPTIONS=-Xmx512m zamiast tego Odebrano JAVA_TOOL_OPTIONS: -Xmx512m
Mały rozmiar pamięci niezwiązanej z stertą: Rzadkie przypadki, gdy obliczony rozmiar sterty lub bez sterty jest za mały (mniej niż 200 MB).
Sprawdzanie, czy dopasowanie pamięci jest włączone
Sprawdź strumień dziennika podczas uruchamiania komunikatu, który odwołuje się do obliczeniowej konfiguracji pamięci JVM.
Oto przykładowe dane wyjściowe komunikatu podczas uruchamiania.
Obliczana konfiguracja pamięci JVM: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (łączna ilość pamięci: 2G, liczba wątków: 250, liczba załadowanych klas: 12924, pokój główny: 0%)
Odebrano JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
Konfiguracja środowiska uruchomieniowego
Zmienne środowiskowe można ustawić tak, aby wpływały na zachowanie dopasowania pamięci.
Zmienna | Jednostka | Przykład | opis |
---|---|---|---|
BPL_JVM_HEAD_ROOM |
Procent | BPL_JVM_HEAD_ROOM=5 |
Pozostaw miejsce na pamięć dla systemu na podstawie podanej wartości procentowej. |
BPL_JVM_THREAD_COUNT |
Liczba | BPL_JVM_THREAD_COUNT=200 |
Szacowana maksymalna liczba wątków. |
BPL_JVM_CLASS_ADJUSTMENT |
Liczba Procent |
BPL_JVM_CLASS_ADJUSTMENT=10000 BPL_JVM_CLASS_ADJUSTMENT="10%" |
Dostosuj liczbę klas JVM według jawnej wartości lub wartości procentowej. |
Uwaga
Zmiana tych zmiennych nie powoduje wyłączenia automatycznego dopasowania pamięci.
Ostrzeżenie o braku pamięci
Jeśli zdecydujesz się samodzielnie skonfigurować ustawienia pamięci, wystąpi ryzyko wystąpienia ostrzeżenia o braku pamięci.
Oto kilka możliwych powodów, dla których kontener może zabraknąć pamięci:
Pamięć stertowa jest większa niż łączna ilość dostępnej pamięci.
Pamięć niezwiązana z stosem jest większa niż łączna ilość dostępnej pamięci.
Pamięć sterta i niezwiązana z stertą jest większa niż łączna ilość dostępnej pamięci.
Jeśli w kontenerze zabraknie pamięci, zostanie wyświetlone następujące ostrzeżenie:
Ostrzeżenie OOM: pamięć sterty 1200M jest większa niż 1G dostępna dla alokacji (-Xmx1200M)