Vanliga frågor och svar om Azure Command Launcher för Java (offentlig förhandsversion)

Ger svar på vanliga frågor om Azure Command Launcher för Java.

Hur skiljer sig det här verktyget från java-kommandot?

Kommandot java kör HotSpot JVM (Java Virtual Machine) med standardinställningar om inte uttryckligen konfigurerats av användaren. jaz är en komponent i Azure Command Launcher för Java som lanseras java med stridstestade, molnoptimerade JVM-justeringsstandarder som är utformade för att förbättra prestanda och kostnadseffektivitet på virtuella Azure-datorer och -containrar.

Viktig fördel: utvecklare behöver inte justera JVM manuellt. jaz gör det för dem.

Vad händer om jag redan har angett några JVM-alternativ i min miljö?

Om din arbetsbelastning innehåller JVM-justeringsflaggor jaz tillämpar kommandot inte sina egna standardinställningar för justering. jaz java startar med de flaggor du valde.

Vi rekommenderar att du tar bort arbetsbelastningens justeringsflaggor och låter Azure Command Launcher för Java tillämpa sina egna.

Du kan också konfigurera jaz att ignorera dina justeringsflaggor och använda standardinställningarna för justeringen. Överväg att använda den här konfigurationen för att verifiera jaz med minimal ändring av arbetsbelastningskonfigurationen. Det gör du genom att ange följande miljövariabel:

export JAZ_IGNORE_USER_TUNING=1

Inställningen ignorera användarjustering gäller för kommandoradsargument, miljövariabler som läses av java och @-filer.

Du kan också konfigurera jaz att hoppa över alla standardinställningar för justering genom att ange följande miljövariabel:

export JAZ_BYPASS=1

Kringgå-alternativet gör det möjligt för dig att ansluta till Azure Command Launcher för Java utan att påverka din nuvarande inställning, även om din arbetsbelastning använder standardbeteendet för java kommandot. Det här beteendet kan vara användbart för att verifiera verktygets beteende innan du rensar JVM-justeringsflaggor.

Det kan också vara användbart att kringgå justering när du felsöker ett problem som verkar vara relaterat till JVM-justering.

Vilka JVM-alternativ betraktas som justeringsflaggor?

Kommandot jaz anser att de flesta flaggor som börjar med -X eller -XX är en justeringsflagga, till exempel -Xmx<size>. Ett anmärkningsvärt exempel på en flagga som börjar med -X men inte är en justeringsflagga är -Xlog:<opts>.

Mer exakt utvärderas varje JVM-alternativ med hjälp av logiken i följande lista. Den här listan beskriver logiken i den senaste versionen av Azure Command Launcher för Java.

  1. Om alternativet börjar med någon annan text än -Xär det inte en justeringsflagga.
  2. Om alternativet matchar något av dessa reguljära uttryck är det inte en justeringsflagga:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. Annars är alternativet en justeringsflagga.

När jaz letar efter justeringsflaggor undersöker den argumenten som skickas till den och de miljövariabler som java läser automatiskt. Miljövariablerna är:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 och senare: JAVA_TOOL_OPTIONS, JDK_JAVA_OPTIONS, _JAVA_OPTIONS

jaz hanterar även @-files, även kallade kommandoradsargumentfiler.

Kan jag skicka java-agentflaggor när jag använder verktyget?

Yes. Du kan fortfarande skicka -javaagent och andra flaggor som inte är inställningsflaggor, och jaz respekterar dem. Du kan behålla användbara diagnostikflaggor som:

  • -Xlog för loggning
  • -javaagent för Application Insights eller andra APM-instrumentationsagenter (Application Performance Monitoring)

Är verktyget kompatibelt med icke-Azure-miljöer?

jaz är utformat och testat främst för Azure-containrar och virtuella datorer, men det kan köras tekniskt någon annanstans. Vissa avancerade optimeringar och framtida funktioner kan dock vara Azure-specifika.

Är verktyget tillgängligt för Windows Server?

jaz är för närvarande tillgängligt för Linux i x64- och arm64-miljöer. Om du har ett omedelbart behov av Windows Server kontaktar du oss på openjdk-support@microsoft.com.

Azure Command Launcher för Java har testats och certifierats endast med fullständiga JDK-installationer. Det kanske inte fungerar korrekt med:

  • JRE-installationer (Java Runtime Environment)
  • Anpassade jlink-körmiljöer

Fullständiga JDK-installationer innehåller alla verktyg och bibliotek som jaz krävs för att fungera korrekt. Anpassade JRE- och jlink-körmiljöer kan sakna vissa av dessa komponenter, vilket kan förhindra att jaz fungerar som förväntat.

Varför spelar min cgroup-monteringspunkt roll?

Azure-kommandostartaren för Java läser cgroup v1- och v2-information från /sys/fs/cgroup för att fastställa tillgängliga resurser, till exempel minnesgränser och CPU-begränsningar, och justera JVM i enlighet med detta. Om cgroup-filsystemet inte är monterat på standardplatsen /sys/fs/cgroup kanske jaz det inte går att identifiera containeriseringsgränser korrekt. Detta kan leda till dålig prestanda eller till och med minnesfel eftersom jaz kan justera JVM baserat på värdens resurser i stället för containerns faktiska begränsningar.

Vi har inte identifierat något verkligt scenario där cgroup-monteringspunkten är något annat än /sys/fs/cgroup. Det går dock att simulera det här scenariot i en container genom att demontera cgroup-filsystemet från /sys/fs/cgroup och montera det på en annan plats. Då kommer jaz inte att kunna läsa cgroup-informationen och kommer inte att tillämpa containermedveten justering.

Undvik problem genom att inte ändra monteringspunkten för cgroup från standardplatsen /sys/fs/cgroup .

Även om cgroup-monteringspunkter är mest relevanta i containerbaserade miljöer kan de också vara relevanta i virtuella datorer och andra Linux-miljöer som använder cgroups för resurshantering.

Fungerar verktyget med kapslade cgroup-konfigurationer?

Kapslade cgroup-konfigurationer kan påverka hur Azure kommandostartare för Java läser resursgränser. jaz har inte testats med kapslade cgroup-hierarkier, så det kanske inte identifierar resursbegränsningar korrekt i dessa miljöer.

Om du använder kapslade cgroups och upplever oväntat beteende kontaktar du oss på openjdk-support@microsoft.com.