Nejčastější dotazy ke spouštěči příkazů Azure pro Javu (Public Preview)

Poskytuje odpovědi na běžné otázky týkající se spouštěče příkazů Azure pro Javu.

Jak se tento nástroj liší od příkazu Java?

Příkaz java spustí HotSpot JVM (Java Virtual Machine) s výchozím nastavením, pokud ho uživatel explicitně nenakonfiguruje. jaz je součástí spouštěče příkazů Azure pro Javu, spouštějící java s osvědčenými, pro cloud optimalizovanými výchozími nastaveními ladění JVM, navrženými k zlepšení výkonu a nákladové efektivity na virtuálních strojích a kontejnerech Azure.

Klíčovou výhodu: Vývojáři nemusí ručně ladit prostředí JVM. jaz dělá to pro ně.

Co se stane, když už v prostředí nastavím některé možnosti prostředí JVM?

Pokud vaše úloha obsahuje příznaky ladění JVM, jaz příkaz nepoužije vlastní výchozí nastavení ladění. jaz spustí java s příznaky, které jste zvolili.

Doporučujeme odebrat příznaky ladění úloh a nechat spouštěč příkazů Azure pro Javu použít vlastní.

Můžete také nakonfigurovat jaz , aby ignorovala příznaky ladění a používala výchozí nastavení ladění. Zvažte použití této konfigurace k ověření jaz s minimální změnou konfigurace úloh. Uděláte to tak, že nastavíte následující proměnnou prostředí:

export JAZ_IGNORE_USER_TUNING=1

Nastavení ignorování uživatele platí pro argumenty příkazového řádku, proměnné prostředí čtené pomocí java a @-souborů.

Můžete také nakonfigurovat jaz tak, aby přeskočí všechna výchozí nastavení jeho ladění nastavením následující proměnné prostředí:

export JAZ_BYPASS=1

Možnost obejití umožňuje připojit se ke spouštěči příkazů Azure pro Javu, aniž by to ovlivnilo aktuální ladění, i když vaše úloha používá výchozí chování java příkazu. Toto chování může být užitečné pro ověření chování nástroje před odstraněním parametrů ladění JVM.

Při řešení potíží, které se zdá, že souvisí s laděním JVM, může být také užitečné obejít ladění.

Jaké parametry prostředí JVM se považují za příznaky ladění?

Příkaz jaz považuje většinu příznaků, které začínají s -X nebo -XX, za příznaky ladění, jako je -Xmx<size>. Pozoruhodný příklad příznaku, který začíná -X, ale není příznakem ladění, je -Xlog:<opts>.

Přesněji řečeno, každá možnost JVM se vyhodnocuje pomocí logiky v následujícím seznamu. Tento seznam popisuje logiku v nejnovější verzi spouštěče příkazů Azure pro Javu.

  1. Pokud tato možnost začíná jiným textem než -X, není to příznak ladění.
  2. Pokud se tato možnost shoduje s některým z těchto regulárních výrazů, nejedná se o příznak ladění:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. V opačném případě je tato možnost příznakem ladění.

Když jaz hledá příznaky ladění, zkontroluje předané argumenty a proměnné prostředí, které java automaticky čte. Proměnné prostředí jsou:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 a novější: JAVA_TOOL_OPTIONS, JDK_JAVA_OPTIONS_JAVA_OPTIONS

jaz zpracovává také soubory @-files, označované také jako soubory argumentů příkazového řádku.

Je možné při použití nástroje předat parametry agenta Java?

Yes. Stále můžete předat -javaagent a další příznaky, které nejsou příznaky pro ladění, a jaz je dodržuje. Můžete zachovat užitečné diagnostické příznaky, jako jsou:

  • -Xlog pro protokolování
  • -javaagent pro agenty instrumentace Application Insights nebo jiné agenty instrumentace Aplikace Monitorování Výkonnosti (APM)

Je nástroj kompatibilní s prostředími mimo Azure?

jaz je navržený a otestovaný především pro kontejnery Azure a virtuální počítače, ale technicky může běžet jinde. Některé pokročilé optimalizace a budoucí funkce ale můžou být specifické pro Azure.

Je nástroj dostupný pro Windows Server?

jaz je aktuálně k dispozici pro Linux v prostředích x64 a arm64. Pokud potřebujete okamžitě Windows Server, kontaktujte nás na adrese openjdk-support@microsoft.com.

Spouštěč příkazů Azure pro Javu se testoval a certifikoval pouze s úplnými instalacemi sady JDK. Nemusí správně fungovat s:

  • Instalace prostředí JRE (Java Runtime Environment)
  • Vlastní jlink runtime prostředí

Úplné instalace sady JDK zahrnují všechny nástroje a knihovny, které jaz vyžadují správné fungování. Vlastní runtimy JRE a jlink můžou postrádat některé z těchto komponent, což může bránit jaz ve fungování podle očekávání.

Proč je důležitý přípojný bod cgroup?

Spouštěč příkazů Azure pro Java čte informace cgroup v1 a v2 z /sys/fs/cgroup k určení dostupných prostředků, jako jsou limity paměti a omezení procesoru, a odpovídajícím způsobem vylaďte JVM. Pokud není systém souborů cgroup připojen na standardní /sys/fs/cgroup umístění, jaz nemusí správně rozpoznat limity kontejnerizace. To může vést k nízkému výkonu nebo dokonce chybám kvůli nedostatku paměti, protože jaz může prostředí JVM ladit na základě prostředků hostitele místo skutečných limitů kontejneru.

Nenašli jsme skutečný scénář, kdy přípojný bod cgroup je něco jiného než /sys/fs/cgroup. Tento scénář je ale možné simulovat v kontejneru tak, že odpojíte systém souborů cgroup z /sys/fs/cgroup a připojíte ho na jiném místě. Pak jaz nebude moci číst informace cgroup a neuplatní ladění s ohledem na kontejnery.

Abyste se vyhnuli problémům, neměňte přípojný bod cgroup z jeho standardního umístění /sys/fs/cgroup.

I když jsou přípojné body cgroup nejrelevantnější v kontejnerizovaných prostředích, můžou být rovněž důležité ve virtuálních počítačích a jiných linuxových prostředích, která používají cgroups pro správu prostředků.

Funguje nástroj s vnořenými konfiguracemi cgroup?

Vnořené konfigurace cgroup mohou ovlivnit způsob, jakým Azure Command Launcher pro Javu čte limity prostředků. jaz nebyla testována s vnořenými hierarchiemi cgroup, takže nemusí v těchto prostředích správně zjišťovat omezení prostředků.

Pokud používáte vnořené skupiny cgroup a dochází k neočekávanému chování, kontaktujte nás na adrese openjdk-support@microsoft.com.