Fornisce risposte alle domande comuni sull'Avviatore di Comandi di Azure per Java.
In che modo questo strumento è diverso dal comando Java?
Il java comando esegue HotSpot JVM (Java Virtual Machine) con impostazioni predefinite, a meno che non siano configurate in modo esplicito dall'utente.
jaz è un componente dell'utilità di avvio dei comandi di Azure per Java che avvia java con impostazioni JVM predefinite e ottimizzate per il cloud, progettate per migliorare le prestazioni ed efficienza dei costi su VM e contenitori di Azure.
Vantaggio chiave: gli sviluppatori non devono ottimizzare manualmente la JVM.
jaz lo fa per loro.
Cosa accade se sono già state impostate alcune opzioni JVM nell'ambiente?
Se il carico di lavoro include flag di ottimizzazione JVM, il jaz comando non applica le proprie impostazioni predefinite di ottimizzazione.
jaz avvia java con le opzioni che hai scelto.
È consigliabile rimuovere i flag di ottimizzazione del carico di lavoro e consentire all'Utilità di avvio comandi di Azure per Java di applicare i propri flag.
È anche possibile configurare jaz affinché ignori i flag di ottimizzazione e utilizzi le sue impostazioni predefinite di ottimizzazione.
Prendere in considerazione l'uso di questa configurazione per convalidare jaz con modifiche minime alla configurazione del carico di lavoro.
A tale scopo, impostare la variabile di ambiente seguente:
export JAZ_IGNORE_USER_TUNING=1
L'impostazione ignora l'ottimizzazione utente si applica agli argomenti della riga di comando, alle variabili di ambiente lette da javae a @-files.
È anche possibile configurare per ignorare jaz tutte le impostazioni predefinite di ottimizzazione impostando la variabile di ambiente seguente:
export JAZ_BYPASS=1
L'opzione bypass consente di eseguire l'onboarding all'Azure Command Launcher per Java senza influire sull'ottimizzazione corrente, anche se il carico di lavoro usa il comportamento predefinito del comando java.
Questo comportamento può essere utile per convalidare il comportamento dello strumento prima di pulire i flag di ottimizzazione di JVM.
Può anche essere utile bypassare il tuning durante la risoluzione di un problema che sembra essere correlato al tuning della JVM.
Quali opzioni JVM sono considerate flag di ottimizzazione?
Il jaz comando considera la maggior parte dei flag che iniziano con -X o -XX come flag di ottimizzazione, ad esempio -Xmx<size>.
Un esempio rilevante di un flag che inizia con -X ma non è un flag di ottimizzazione è -Xlog:<opts>.
Più precisamente, ogni opzione JVM viene valutata usando la logica nell'elenco seguente. Questo elenco descrive la logica nella versione più recente dell'utilità di avvio dei comandi di Azure per Java.
- Se l'opzione inizia con qualsiasi testo diverso da
-X, non è un flag di ottimizzazione. - Se l'opzione corrisponde a una di queste espressioni regolari, non è un flag di regolazione:
^-Xlog.+$^-XX:ErrorFile=.*$^-XX:[+-]?HeapDump.*$^-XX:[+-].*OnOutOfMemoryError$
- In caso contrario, l'opzione è un flag di ottimizzazione.
Quando jaz cerca i flag di ottimizzazione, esamina gli argomenti passati e le variabili di ambiente che java legge automaticamente.
Le variabili di ambiente sono:
- Java 8:
JAVA_TOOL_OPTIONS,_JAVA_OPTIONS - Java 9 e versioni successive:
JAVA_TOOL_OPTIONS,JDK_JAVA_OPTIONS,_JAVA_OPTIONS
jaz gestisce anche @-files, noti anche come file di argomenti della riga di comando.
È possibile passare le opzioni dell'agente Java quando si usa lo strumento?
Yes. È comunque possibile passare -javaagent e altri flag che non sono di ottimizzazione, e jaz li rispetta.
È possibile mantenere flag di diagnostica utili, ad esempio:
-
-Xlogper la registrazione -
-javaagentper Application Insights o altri agenti di strumentazione di Application Performance Monitoring (APM)
Lo strumento è compatibile con ambienti non Azure?
jaz è progettato e testato principalmente per contenitori di Azure e macchine virtuali, ma tecnicamente può essere eseguito altrove.
Tuttavia, alcune ottimizzazioni avanzate e le funzionalità future potrebbero essere specifiche di Azure.
Lo strumento è disponibile per Windows Server?
jaz è attualmente disponibile per Linux in ambienti x64 e arm64.
Se si ha una necessità immediata di Windows Server, contattare microsoft all'indirizzo openjdk-support@microsoft.com.
Perché non funziona con i runtime JRE o jlink?
L'utilità di avvio dei comandi di Azure per Java è stata testata e certificata solo con installazioni JDK complete. Potrebbe non funzionare correttamente con:
- Installazioni JRE (Java Runtime Environment)
- Runtime jlink personalizzati
Le installazioni complete di JDK includono tutti gli strumenti e le librerie che jaz richiedono il corretto funzionamento. I runtime personalizzati JRE e jlink potrebbero non avere alcuni di questi componenti, che possono impedire jaz il funzionamento come previsto.
Perché il punto di montaggio cgroup è importante?
L'utilità di avvio dei comandi Azure per Java legge le informazioni cgroup v1 e v2 da /sys/fs/cgroup per determinare le risorse disponibili, ad esempio i limiti di memoria e i vincoli della CPU e ottimizzare di conseguenza la JVM.
Se il file system cgroup non è montato nel percorso standard /sys/fs/cgroup , jaz potrebbe non rilevare correttamente i limiti di containerizzazione.
Ciò può causare prestazioni scarse o persino errori di memoria insufficiente perché jaz potrebbe ottimizzare la JVM in base alle risorse dell'host anziché ai limiti effettivi del contenitore.
Non è stato identificato uno scenario reale in cui il punto di montaggio cgroup è diverso da /sys/fs/cgroup.
Tuttavia, è possibile simulare questo scenario in un contenitore smontando il file system cgroup da /sys/fs/cgroup e montandolo su un percorso differente.
Quindi, jaz non sarà in grado di leggere le informazioni sul cgroup e non applicherà l'ottimizzazione compatibile con i contenitori.
Per evitare problemi, non modificare il punto di montaggio cgroup dalla posizione standard /sys/fs/cgroup .
Anche se i punti di montaggio cgroup sono più rilevanti negli ambienti in contenitori, possono essere rilevanti anche nelle macchine virtuali e in altri ambienti Linux che usano cgroup per la gestione delle risorse.
Lo strumento funziona con configurazioni cgroup annidate?
Le configurazioni cgroup annidate possono influire sul modo in cui l'utilità di avvio dei comandi Azure per Java legge i limiti delle risorse.
jaz non è stato testato con gerarchie cgroup annidate, quindi potrebbe non rilevare correttamente i vincoli delle risorse in questi ambienti.
Se si usano cgroup annidati e si verifica un comportamento imprevisto, contattare Microsoft all'indirizzo openjdk-support@microsoft.com.