Häufig gestellte Fragen zum Azure-Befehlsstartprogramm für Java (öffentliche Vorschau)

Bietet Antworten auf häufig gestellte Fragen zum Azure-Befehlsstartprogramm für Java.

Wie unterscheidet sich dieses Tool vom Java-Befehl?

Der java Befehl führt die HotSpot-JVM (Java Virtual Machine) mit Standardeinstellungen aus, es sei denn, sie wurden vom Benutzer ausdrücklich konfiguriert. jaz ist eine Komponente des Azure Command Launcher für Java, die java mit bewährten, cloud-optimierten JVM-Optimierungseinstellungen startet, die zur Verbesserung der Leistung und Kosteneffizienz auf Azure-VMs und -Containern entwickelt wurden.

Hauptvorteil: Entwickler müssen das JVM nicht manuell optimieren. jaz erledigt das für sie.

Was geschieht, wenn ich bereits einige JVM-Optionen in meiner Umgebung festgelegt habe?

Wenn Ihre Workload JVM-Optimierungskennzeichnungen enthält, wendet der jaz Befehl keine eigenen Tuningstandardwerte an. jaz startet java mit den von Ihnen ausgewählten Flags.

Wir empfehlen, die Tuning Flags Ihres Workloads zu entfernen und den Azure Command Launcher für Java seine eigenen anwenden zu lassen.

Sie können auch jaz so konfigurieren, dass Ihre Optimierungs-Flags ignoriert werden und die Standardeinstellungen für die Optimierung verwendet werden. Erwägen Sie die Verwendung dieser Konfiguration, um jaz mit minimaler Änderung Ihrer Workloadkonfiguration zu validieren. Legen Sie dazu die folgende Umgebungsvariable fest:

export JAZ_IGNORE_USER_TUNING=1

Die Einstellung "Benutzer-Tuning ignorieren" gilt für Kommandozeilenargumente, Umgebungsvariablen, die von java gelesen werden, und @-Dateien.

Sie können jaz auch so konfigurieren, dass es alle seine Optimierungsstandardwerte überspringt, indem Sie die folgende Umgebungsvariable festlegen:

export JAZ_BYPASS=1

Mit der Umgehungsoption können Sie den Azure-Befehlsstarter für Java integrieren, ohne Ihre aktuelle Optimierung zu beeinträchtigen, selbst wenn Ihre Arbeitslast das Standardverhalten des java-Befehls verwendet. Dieses Verhalten kann hilfreich sein, um das Verhalten des Tools zu validieren, bevor JVM-Tuning-Flags bereinigt werden.

Es kann auch nützlich sein, die Abstimmung zu umgehen, wenn es um die Fehlerbehebung eines Problems geht, das mit der JVM-Abstimmung zusammenzuhängen scheint.

Welche JVM-Optionen gelten als Tuningflags?

Der jaz-Befehl betrachtet die meisten Flags, die mit -X oder -XX beginnen, als Optimierungsflag, wie -Xmx<size>. Ein bemerkenswertes Beispiel für eine Flagge, die mit -X beginnt, aber keine Optimierungsflagge ist, ist -Xlog:<opts>.

Genauer gesagt wird jede JVM-Option mithilfe der Logik in der folgenden Liste ausgewertet. Diese Liste beschreibt die Logik in der neuesten Version des Azure-Befehlsstartfelds für Java.

  1. Wenn die Option mit einem anderen Text als -X beginnt, handelt es sich nicht um ein Tuning-Flag.
  2. Wenn die Option auf einen dieser regulären Ausdrücke passt, handelt es sich nicht um ein Tuning Flag:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. Andernfalls ist die Option ein Tuning Flag.

Wenn jaz nach Optimierungskennzeichnungen sucht, untersucht es die an es übergebenen Argumente und die Umgebungsvariablen, die java automatisch liest. Die Umgebungsvariablen sind:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 und höher: JAVA_TOOL_OPTIONS, , JDK_JAVA_OPTIONS_JAVA_OPTIONS

jaz behandelt auch @-Dateien, auch als Befehlszeilenargumentdateien bezeichnet.

Kann ich Java-Agent-Flags übergeben, wenn ich das Tool verwende?

Yes. Sie können weiterhin -javaagent und andere Flags übergeben, die keine Tuning Flags sind, und jaz berücksichtigt diese. Sie können nützliche Diagnosekennzeichnungen beibehalten, z. B.:

  • -Xlog für die Protokollierung
  • -javaagent für Application Insights oder andere Application Performance Monitoring (APM) Instrumentation Agents

Ist das Tool mit Nicht-Azure-Umgebungen kompatibel?

jaz ist in erster Linie für Azure-Container und virtuelle Computer konzipiert und getestet, kann aber technisch an anderer Stelle ausgeführt werden. Einige erweiterte Optimierungen und zukünftige Features können jedoch Azure-spezifisch sein.

Ist das Tool für Windows Server verfügbar?

jaz ist derzeit für Linux unter x64- und arm64-Umgebungen verfügbar. Wenn Sie sofort Windows Server benötigen, wenden Sie sich bitte an uns unter openjdk-support@microsoft.com.

Das Azure Command Launcher für Java wurde nur mit vollständigen JDK-Installationen getestet und zertifiziert. Es funktioniert möglicherweise nicht ordnungsgemäß mit:

  • JRE-Installationen (Java-Runtime-Umgebung)
  • Benutzerdefinierte jlink-Laufzeiten

Vollständige JDK-Installationen enthalten alle Tools und Bibliotheken, die jaz ordnungsgemäß funktionieren müssen. Bei angepassten JRE- und jlink-Runtrimes können einige dieser Komponenten fehlen, was dazu führen kann, dass jaz nicht wie erwartet funktioniert.

Warum ist der Bereitstellungspunkt meiner cgroup wichtig?

Das Azure-Befehlsstartprogramm für Java liest cgroup v1- und v2-Informationen aus /sys/fs/cgroup, um die verfügbaren Ressourcen zu ermitteln, z. B. Speicherlimits und CPU-Einschränkungen, und optimieren Sie das JVM entsprechend. Wenn das cgroup-Dateisystem nicht am standardmäßigen /sys/fs/cgroup-Speicherort gemountet ist, erkennt jaz die Limits für die Containerisierung möglicherweise nicht korrekt. Dies kann zu mangelnder Leistung oder sogar zu Fehlern aufgrund unzureichenden Arbeitsspeichers führen, weil jaz die JVM möglicherweise basierend auf den Ressourcen des Hosts statt auf den tatsächlichen Grenzen des Containers einstellen könnte.

Wir haben kein reales Szenario identifiziert, in dem der Cgroup-Bereitstellungspunkt etwas anderes ist als /sys/fs/cgroup. Es ist jedoch möglich, dieses Szenario in einem Container zu simulieren, indem man das cgroup-Dateisystem von /sys/fs/cgroup unmountet und es an einem anderen Ort mounten lässt. In diesem Fall ist jaz nicht in der Lage, die cgroup-Informationen zu lesen und kann keine Container-Abstimmung durchführen.

Um Probleme zu vermeiden, ändern Sie den Cgroup-Mount-Punkt nicht von der Standardposition /sys/fs/cgroup.

Während Cgroup-Bereitstellungspunkte in containerisierten Umgebungen am relevantesten sind, können sie auch in virtuellen Computern und anderen Linux-Umgebungen relevant sein, die cgroups für die Ressourcenverwaltung verwenden.

Funktioniert das Tool mit geschachtelten CGroup-Konfigurationen?

Geschachtelte CGroup-Konfigurationen können sich darauf auswirken, wie das Azure-Befehlsstartprogramm für Java Ressourcenbeschränkungen liest. jaz wurde nicht mit geschachtelten Cgroup-Hierarchien getestet, sodass ressourceneinschränkungen in diesen Umgebungen möglicherweise nicht ordnungsgemäß erkannt werden.

Wenn Sie geschachtelte cgroups verwenden und unerwartetes Verhalten beobachten, wenden Sie sich bitte an uns unter openjdk-support@microsoft.com.