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.

Es wird empfohlen, die Optimierungskennzeichnungen Ihrer Workload zu entfernen und das Azure Command Launcher für Java selbst anzuwenden.

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 zum Ignorieren der Benutzereinstellungen gilt für Befehlszeilenargumente, Umgebungsvariablen, die von java und @-Dateien gelesen werden.

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 hilfreich sein, die Optimierung zu umgehen, wenn ein Problem behoben wird, das sich auf die JVM-Optimierung bezieht.

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 mit einem dieser regulären Ausdrücke übereinstimmt, handelt es sich nicht um eine Optimierungskennzeichnung:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. Andernfalls ist die Option eine Optimierungskennzeichnung.

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, die keine Tuning-Flags sind, übergeben, und jaz berücksichtigt sie. Sie können nützliche Diagnosekennzeichnungen beibehalten, z. B.:

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

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. Benutzerdefinierte JRE- und jlink-Laufzeiten können einige dieser Komponenten fehlen, was jaz daran hindern kann, wie erwartet zu funktionieren.

Warum spielt mein Cgroup-Bereitstellungspunkt eine Rolle?

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 Standardspeicherort /sys/fs/cgroup bereitgestellt wird, jaz werden containerisierungsgrenzwerte möglicherweise nicht ordnungsgemäß erkannt. 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 das cgroup-Dateisystem von /sys/fs/cgroup ausgehängt und an einem anderen Speicherort eingehängt wird. jaz kann die cgroup-Informationen nicht lesen, und es werden keine optimierungen für containerbasierte Anwendungen angewendet.

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.