Zawiera odpowiedzi na często zadawane pytania dotyczące modułu uruchamiania poleceń platformy Azure dla języka Java.
W jaki sposób to narzędzie różni się od polecenia java?
Polecenie java uruchamia maszynę wirtualną HotSpot JVM (Java Virtual Machine) z ustawieniami domyślnymi, chyba że użytkownik jawnie skonfigurował.
jaz to komponent programu Azure Command Launcher dla Javy, który uruchamia java przy użyciu sprawdzonych w boju, zoptymalizowanych pod kątem chmury domyślnych ustawień dostrajania JVM, zaprojektowanych w celu zwiększenia wydajności i opłacalności na maszynach wirtualnych i w kontenerach platformy Azure.
Kluczowa korzyść: deweloperzy nie muszą ręcznie dostroić maszyny JVM.
jaz robi to dla nich.
Co się stanie, jeśli w moim środowisku ustawiono już niektóre opcje JVM?
Jeśli obciążenie zawiera flagi dostrajania JVM, jaz polecenie nie stosuje własnych ustawień domyślnych dostrajania.
jaz uruchamia java z wybranymi flagami.
Zalecamy usunięcie flag dostrajania obciążenia i umożliwienie Azure Command Launcher for Java zastosowanie własnych.
Można również skonfigurować jaz tak, aby ignorowało flagi dostrajania i korzystało z domyślnych ustawień dostrajania.
Rozważ użycie tej konfiguracji do weryfikacji jaz przy użyciu minimalnej zmiany konfiguracji obciążenia.
W tym celu ustaw następującą zmienną środowiskową:
export JAZ_IGNORE_USER_TUNING=1
Ustawienie ignorowania dostrajania użytkownika dotyczy argumentów wiersza polecenia, zmiennych środowiskowych odczytanych przez java oraz plików @.
Można również skonfigurować jaz , aby pominąć wszystkie ustawienia domyślne dostrajania, ustawiając następującą zmienną środowiskową:
export JAZ_BYPASS=1
Opcja obejścia pozwala na zarejestrowanie się w programie Uruchamianie Poleceń na platformie Azure dla Java bez wpływu na bieżące dostrajanie, nawet jeśli obciążenie wykorzystuje domyślne zachowanie polecenia java.
To zachowanie może być przydatne do zweryfikowania zachowania narzędzia przed wyczyszczeniem flag dostrajania JVM.
Może być również przydatne zrezygnowanie z dostrajania podczas rozwiązywania problemu, który wydaje się być związany z dostrajaniem JVM.
Jakie opcje JVM są uznawane za flagi dostrajania?
Polecenie jaz uwzględnia większość flag rozpoczynających się od -X lub -XX jako flagę dostrajania, taką jak -Xmx<size>.
Godnym uwagi przykładem flagi rozpoczynającej się od -X , ale nie jest flagą dostrajania jest -Xlog:<opts>.
Dokładniej mówiąc, każda opcja JVM jest oceniana przy użyciu logiki na poniższej liście. Ta lista zawiera opis logiki w najnowszej wersji modułu uruchamiania poleceń platformy Azure dla języka Java.
- Jeśli opcja rozpoczyna się od dowolnego tekstu innego niż
-X, nie jest to flaga dostrajania. - Jeśli opcja jest zgodna z dowolnym z tych wyrażeń regularnych, nie jest to flaga dostrajania:
^-Xlog.+$^-XX:ErrorFile=.*$^-XX:[+-]?HeapDump.*$^-XX:[+-].*OnOutOfMemoryError$
- W przeciwnym razie opcja jest flagą dostrajania.
Podczas wyszukiwania flag dostrajania, jaz analizuje przekazane mu argumenty oraz automatycznie odczytywane zmienne środowiskowe przez java.
Zmienne środowiskowe to:
- Java 8:
JAVA_TOOL_OPTIONS,_JAVA_OPTIONS - Środowisko Java 9 lub nowsze:
JAVA_TOOL_OPTIONS, ,JDK_JAVA_OPTIONS_JAVA_OPTIONS
jaz obsługuje również pliki @-files, znane również jako pliki argumentów wiersza polecenia.
Czy mogę przekazać flagi agenta Java podczas korzystania z narzędzia?
Yes. Nadal można przekazywać -javaagent i inne flagi, które nie są flagami dostrajającymi, a jaz je honoruje.
Możesz zachować przydatne flagi diagnostyczne, takie jak:
-
-Xlogdo rejestrowania -
-javaagentw przypadku usługi Application Insights lub innych agentów instrumentacji programu Application Performance Monitoring (APM)
Czy narzędzie jest zgodne ze środowiskami spoza platformy Azure?
jaz jest projektowany i testowany głównie dla kontenerów platformy Azure i maszyn wirtualnych, ale może działać technicznie w innym miejscu.
Jednak niektóre zaawansowane optymalizacje i przyszłe funkcje mogą być specyficzne dla platformy Azure.
Czy narzędzie jest dostępne dla systemu Windows Server?
jaz jest obecnie dostępny dla systemu Linux w środowiskach x64 i arm64.
Jeśli masz natychmiastową potrzebę Windows Server, skontaktuj się z nami pod adresem openjdk-support@microsoft.com.
Dlaczego nie działa ze środowiskami uruchomieniowymi JRE lub jlink?
Narzędzie Azure Command Launcher dla języka Java zostało przetestowane i certyfikowane tylko z pełnymi instalacjami zestawu JDK. Może to nie działać poprawnie z:
- Instalacje środowiska JRE (Java Runtime Environment)
- Niestandardowe środowiska uruchomieniowe jlink
Pełne instalacje zestawu JDK obejmują wszystkie narzędzia i biblioteki, które jaz wymagają prawidłowego działania. Środowiska uruchomieniowe JRE i niestandardowe środowiska uruchomieniowe jlink mogą nie mieć niektórych z tych składników, co może uniemożliwić jaz funkcjonowanie zgodnie z oczekiwaniami.
Dlaczego punkt montowania cgroup ma znaczenie?
Azure Command Launcher for Java odczytuje informacje cgroup v1 i v2 z /sys/fs/cgroup w celu określenia dostępnych zasobów, takich jak limity pamięci i ograniczenia CPU, i odpowiednio dostraja maszynę JVM.
Jeśli system plików cgroup nie jest zainstalowany w standardowej /sys/fs/cgroup lokalizacji, jaz może nie wykryć poprawnie limitów konteneryzacji.
Może to prowadzić do niskiej wydajności lub nawet błędów braku pamięci, ponieważ jaz może dostroić maszynę wirtualną JVM na podstawie zasobów hosta, a nie rzeczywistych limitów kontenera.
Nie zidentyfikowaliśmy realistycznego scenariusza, w którym punkt montowania cgroup jest czymś innym niż /sys/fs/cgroup.
Można jednak zasymulować ten scenariusz w kontenerze, odmontowując system plików cgroup z /sys/fs/cgroup i zamontowując go w innej lokalizacji.
jaz Wtedy nie będzie można odczytać informacji o cgroup i nie zastosuje dostrajania uwzględniającego kontenery.
Aby uniknąć problemów, nie zmieniaj punktu instalacji grupy cgroup z lokalizacji standardowej /sys/fs/cgroup .
Punkty instalacji grupy cgroup są najbardziej istotne w środowiskach konteneryzowanych, ale mogą być również istotne w przypadku maszyn wirtualnych i innych środowisk systemu Linux, które używają grup cgroup do zarządzania zasobami.
Czy narzędzie działa z zagnieżdżonymi konfiguracjami grupy cgroup?
Zagnieżdżone konfiguracje grup cgroup mogą wpływać na sposób, w jaki Azure Command Launcher dla Java odczytuje limity zasobów.
jaz nie zostało przetestowane z zagnieżdżonymi hierarchiami cgroup, więc może nie wykrywać poprawnie ograniczeń zasobów w tych środowiskach.
Jeśli używasz zagnieżdżonych cgroupów i doświadczasz nieoczekiwanego zachowania, skontaktuj się z nami pod adresem openjdk-support@microsoft.com.