Java command-line options that control the interaction between Azul Zing Builds of OpenJDK (Zing) and Azul Zing System Tools (ZST) begin with the -XX: prefix. These options summarized in the following table. Zing command-line options are case-sensitive.
Advanced Miscellaneous Options
| Command-Line Option |
Description |
Default |
-XX:[+/-]OptimizeFindDeadlocksWithCheckpoint |
Enable elimination of safepoint pauses for finding deadlocks operations by first attempting to complete them using a checkpoint. If a deadlock is detected in the checkpoint, it is then confirmed using a safepoint pause. |
true |
-XX:DiagnosticFolder=<path> |
Gathers all useful diagnostic logs into one folder for easier evaluation. |
none |
-XX:[+/-]PrintGCHSLines |
Enables writing system information headers (GCHS) in the garbage collection log file. |
true if GC logging is enabled, false if GC logging is disabled |
-XX:[+/-]PrintGCExtraDetails |
Enables a new Garbage Collector logging level used wherever the data collection or reporting has a noticeable overhead. This flag also enables PrintGCDetails which is the next lower logging level. |
false |
-XX:[+/-]PromoteCheckpoints |
Lets tardy threads complete the checkpoint process by pausing active threads. See Troubleshooting Guide for suggestions on when to use this option. |
false |
-XX:CheckpointPromotionDelay=<time in ms> |
Defines the threshold for triggering the promotion timeout. This flag has an effect when -XX:+PromoteCheckpoints is specified. |
850 |
-XX:ProfileStartupLimitInSeconds=<value in seconds> |
Sets time limit for ReadyNow to wait for compilations to finish at startup as specified in seconds. For infinite, use -1. |
0 |
-XX:ActiveProcessorCount=<number of CPUs> |
Allows for specifying explicitly the number of CPUs available for Zing. Works only with the container support (i.e., if -XX:-UseContainerSupport is not specified) and overrides the automatic CPU detection logic in the JVM. |
-1 |
-XX:[+/-]UseContainerSupport |
Turns off using container-specific information about available CPUs instead of using the information about the whole system. Enabled by default. |
true |
-XX:[+/-]DashVersionSilenceLicenseErrors |
Starting with Zing 18.07.0.0, Zing diagnoses licensing problems if run with -version option: it prints a warning and exits with an error code. If this option is specified together with -version, the JVM ignores licensing problems (specifically the warning is not printed) and exits with 0. Setting the ZING_DASH_VERSION_SILENCE_LICENSE_ERRORS environment variable has the same effect. |
false |
-XX:[+/-]PreserveFramePointer |
(Available since Zing 17.03.0.0; requires ZST 5.18.0 or later) The flag is needed for producing flame graphs with the Linux perf utility and for similar performance analysis tools which rely on stackwalking to record Java method invocations, the time percentage spent in them, and their use of Linux system function calls. |
false |
-XX:[+/-]UseLLVMBasedDisassembler |
Turns the LLVM-based disassembler off. Starting with Zing 18.07.0.0, the default disassembler is changed from Zing internal to LLVM-based. |
true |
-XX:PrintAssemblyOptions=intel <diagnostic> |
Changes disassembly syntax from AT&T to intel. This flag is diagnostic and must be preceded by -XX:+UnlockDiagnosticVMOptions. |
|
-XX:[+/-]UseModifiedThreadLocal |
Internally polls on a ReferenceQueue to determine if a key object has been garbage collected rather than polling by checking for NULL through the Reference.get() API, that can unintentionally prevent the weakly reachable key from being garbage collected. The flag is more friendly to garbage collectors that perform marking concurrently. |
true |
-XX:[+/-]UseSpecialArrayCopy |
Indicates which version of arraycopy of objects intrinsic works with. When set to true, it stands for a new vectorized intrinsic version. When set to false, it stands for the old scalar version. |
true |
-Xnativevmflags:[ignore|error|warn] |
If `-Xnativevmflags:error is specified and Zing detects an option that it does not support, it does not launch and generates the following type of message:
HotSpot™ 64-Bit Tiered VM error: Unsupported native VM option ‘+UseParNewGC’
If -Xnativevmflags:warn is specified as a last option in the command line, it enables a warning message for each OpenJDK JVM option ignored by Zing. It prints a warning message while your application starts normally, for example:
$ /opt/zing/zing-jdk8/bin/java -XX:+UseParallelGC -Xnativevmflags:warn -version
Zing 64-Bit Tiered VM warning: Ignoring unsupported native VM option '+UseParallelGC'
java version "1.8.0-zing_18.12.0.0"
Zing Runtime Environment for Java Applications (build 1.8.0-zing_18.12.0.0-b4)
Zing 64-Bit Tiered VM (build 1.8.0-zing_18.12.0.0-b9-product-azlinuxM-X86_64, mixed mode)
|
ignore |
-XX:[+/-]ResetSignalMaskAtLaunch |
Clears the signal mask to enable SIGQUITs when set to true. |
true |
-XX:ProfilePreMainTier2ExtraCompilerThreads=<number of threads> |
Enables the use of extra threads for compilations for the Tier 2 compiler during the pre-main phase when ReadyNow triggers and executes different activities.
This option is complementary to CIMaxCompilerThreads.
In pre-main phase when your code is not yet being executed and GC is silent, the total amount of C2/Falcon compiler threads is equal to the sum of CIMaxCompilerThreads and ProfilePreMainTier2ExtraCompilerThreads. Note that the sum is capped to match the number of CPUs available for Zing on a machine.
When the pre-main phase is done (i.e., ProfileStartupLimitInSeconds is exhausted) and your main is started, the total amount of compiler thread goes back to standard CIMaxCompilerThreads. |
2 |
-XX:ProfileWorkerThreads=<number of threads> |
When this option value is greater than 0, it allows ReadyNow to use multiple concurrent background threads to asynchronously trigger and execute different ReadyNow-related activities such as early class loading, class initializations, or trigger compilations.When the flag value is set to 0, old synchronous event’s triggering and/or processing is used.
The default value is equal to the minimum number of CPUs available for Zing on a machine. |
4 |
-XX:[+/-]RunVMErrorOnUnhandledSignals |
Does error reporting for SIGABRT, SIGFPE, and SIGTRAP signals if there are no user defined handlers installed. |
true |
-XX:[+/-]SafelyTrustEffectivelyFinalFields |
Enables effectively final optimizations for private fields which are initialized inside a constructor or class initializer, but are otherwise read only. The effectively final family of optimizations allows the VM to perform compiler optimization as if the fields were constants, but deoptimize if a later write is detected at runtime. |
true |
-XX:[+/-]UseOpenJSSE |
Enables the OpenJSSE provider that supports TLS 1.3, see https://github.com/openjsse/openjsse for details. |
false |
-XX:[+/-]UseLegacy8uJSSE |
Enables the Legacy8uJSSE provider that includes the 8u252 JSSE provider implementation without TLS 1.3 support as a fallback measure, and the non-default OpenJSSE provider previously included in Zing 8 distributions for non-default support for TLS 1.3. See Using Version 1.3 of Transport Layer Security (TLS) Protocol for details. |
false |
-XX:MaxRAMPercentage=<percentage of the memory limit> |
Adjusts the maximum heap size (if not explicitly specified) based on the configured cgroup memory limit. If Xmx is not specified, the VM heap size limit is calculated as (MaxRAMPercentage / 100) * cgroups_limit. |
25 |
-XX:[+/-]AlignArrayStart |
Enables 64-bit alignment of the starting point of any array in the heap memory. |
true |
-XX:HserrRawCodeWindowSize=<size in bytes> |
Specifies the size of raw x86 instructions to dump into hs_err file. |
512 |
-XX:MlockLevel=<level> |
Selects the memory locking strategy during JVM initialization:
-
0 - Do not attempt any mlock in the JVM.
-
1 - Lock only libjvm.so text region (can mlock up to 20 MB).
-
2 - Lock all existing memory regions before JVM initialization (can mlock up to 150MB).
-
3 - Lock all existing memory regions at the end of JVM initialization (can mlock up to 500 MB with ZST mode, additionally locks the complete Xmx with non-ZST mode).
Note that for the mlock operation to succeed the user should have permission to lock the required amount of memory in RAM. Check the ulimit l setting before starting the JVM with the MlockLevel option. Only a privileged user can increase this limit.
By default, no error message is printed if the mlock operation fails. Adding 1000 to the values above results in the same operation performed with errors, if any, printed to stderr. For example, specifying -XX:MlockLevel=1001 will print a warning if locking libjvm.so text region fails but -XX:MlockLevel=1 will not. |
1 |
-XX:[+/-]KeepCodeEntrantOnAsyncExceptions |
Keeps code of the compiled method entrant for further utilization (instead of making it non-entrant) in the case when an asynchronous exception (OutOfMemoryError, StackOverflowError) occurs during the execution of the JIT-compiled version of the method. |
false |
-XX:[+/-]ProfileExitOnInputError |
Exits when an input profile is specified but cannot be found or is malformed. The option is applicable when file_name is missing for -XX:ProfileLogIn=<filename>. |
false |
-XX:[+/-]UseFastJNIAccessors |
Enables JNI Get<type>Field function optimization. When the optimization is enabled, the function tries to quickly access the field value first. If it is not possible (e.g., garbage collection is in progress), the value is retrieved with the standard procedure. |
true |
-XX:[+/-]UseSpecialHashSet |
Enables optimization for a special HashSet filling pattern when elements of the input collection are frequently added into an empty HashSet. |
false |
-XX:[+/-]UseThreadStateNativeWrapperProtocol |
Enables lock-less JNI transitions.
This flag needs a minimum of 4K available lockable memory to be enabled. Otherwise, the flag ergonomically resets to false. |
true |
-XX:[+/-]UseKestrelC2 |
Enables a newer Tier 2 compiler implementation introduced to Zing in 2020. It is based on a lightweight use of the LLVM backend, and typically produces faster code than UseSeaOfNodesC2 while keeping compilation effort at similar levels. UseKestrelC2 generally exhibits a significantly lower compilation-time CPU consumption compared to Falcon.
This option is complementary to UseC2. |
true |
-XX:[+/-]UseSeaOfNodesC2 |
|
Note
|
Deprecated since 24.02.0.0
|
Enables the traditional C2 implementation that has been part of Zing since 2010.
This option is complementary to UseC2. |
false |
-XX:ZingTestingGracePeriodSec=<value in seconds> |
Specifies the Zing testing grace period, in seconds (up to 3600). |
0 |
-XX:[+/-]UseFastJNIExceptionCheck |
Enables the JNI ExceptionCheck function optimization. When the optimization is enabled, the function tries to quickly check for a synchronous pending exception. If an async exception is set, the exception check happens with the standard procedure. |
true |
-XX:[+/-]MaxFDLimit |
Enables the attempt to set the soft limit for the number of open file descriptors to the hard limit. |
true |
-XX:[+/-]UseLegacyJNINameEscaping |
Enables skipping the extra mapping check to avoid compatibility issues due to new mapping rules for JNI methods introduced in JDK-8233624. See New mapping rules from a Java native method name to a C native library implementation function name for more information about new mapping rules. |
false |
-XX:[+/-]GPGCReportJavaHeapPoolMXBean |
Exposes the total sum of memory usage of all MemoryPoolMXBean memory pools to the java.lang.management interface. |
false |
-XX:GPGCHeapJavaPoolMXBeanName=<value> |
Specifies the name of the total java heap pool only when GPGCShowJavaHeapPoolMXBean is enabled. |
0 |
-XX:GPGCNewGenPoolMXBeanName=<value> |
Specifies the name of the new generation in the java heap pool. |
0 |
-XX:GPGCOldGenPoolMXBeanName=<value> |
Specifies the name of the old generation in the java heap pool. |
0 |
-XX:GPGCPermGenPoolMXBeanName=<value> |
Specifies the name of the permanent generation in the java heap pool. |
0 |
-XX:[+/-]UseModifiedRuleBasedCollator |
Enable the use of the custom implementation of RuleBasedCollator to improve performance over OpenJDK’s text collation and normalization. |
true |
-XX:[+/-]UseModifiedInputStreams |
Use unsynchronized ByteArrayInputStream if it is used as an input of ObjectInputStream as a custom implementation. |
false |
-XX:[+/-]UseContainerCpuShares |
Consider CPU shares when computing available processors inside a cgroup. |
false |
-XX:[+/-]PreferContainerQuotaForVMInternalCPUCount |
Use CPU quota divided by period as base for calculating VM internal thread counts in containers. |
true from Azul Prime 23.08.0.0. |
-XX:[+/-]PreferContainerSharesForVMInternalCPUCount |
Use CPU shares divided by 1024 as base for calculating VM internal thread counts in containers. |
false |
-XX:MallocArenaMax=<number of memory pools> |
Defines the maximum number of memory pools available for glibc. |
0 |
-XX:[+/-]OptimizeIdentityHashForDistribution |
Enables an alternate implementation for System.identityHashCode() which provides better distribution of objects at the cost of making the identity hash calculation itself slower. |
true |
-XX:[+/-]PrintExtendedThreadInfo |
Prints additional information in thread dumps. |
false |
-XX:InstrumentFirstCallInterpreter
|
Enables first call instrumentation of interpreter. |
true |
-XXInstrumentFirstCallOfCompiledMethod
|
Enables first call instrumentation of compiled methods. |
true |
-XX:InstrumentFirstCallOfOSRMethod
|
Enables first call instrumentation of OSR compiled methods |
true |
== Reserved Memory Command
When a Java application starts, heap memory is Reserved according to the value specified using the -Xmx command-line option. If not specified, the value is 1 GB.
There is no specific ulimit pertaining to -Xmx for Zing. Such memory is configured for use during the system’s configuration using ZST. Configuration of the system using ZST requires root level permissions (superuser).
If -Xmx is less than 1 GB, Zing automatically increases it to 1 GB and writes a warning to stderr.
If you are running on a SUSE Linux Enterprise Server (SLES) system, prior to launching Zing for the first time, set the amount of virtual memory available to the shell using ulimit. At the command line, type:
ulimit -v unlimited
== Collecting JVM Behavior Data by Using jstat
To collect information about Zing’s garbage collectors' behavior, use Zing’s monitoring tool (jstat) with the -gpgc command-line option . Use the jstat distributed with Zing, not the jstat distributed with Oracle’s JVM.
Usage Syntax
[source, shell]
----
jstat -gpgc [-t == show timestamps] pid [msec between samples [# samples]]
----
Samples
Sample -gpgc, -t, samples, #samples options
[source, shell]
----
$ jstat -gpgc -t 6549 10 5
Timestamp NGU OGU PGU JHMX NGC NGCT OGC OGCT GCT
172.0 419840.0 2048.0 6144.0 1036288.0 276 170.689 123 94.579 265.268
172.1 419840.0 2048.0 6144.0 1036288.0 276 170.689 123 94.579 265.268
172.1 419840.0 2048.0 6144.0 1036288.0 276 170.689 123 94.579 265.268
172.1 419840.0 2048.0 6144.0 1036288.0 276 170.689 123 94.579 265.268
172.1 419840.0 2048.0 6144.0 1036288.0 276 170.689 123 94.579 265.268
----
Sample -gpgc option
[source, shell]
----
$ jstat -gpgc 44265
NGU OGU PGU JHMX NGC NGCT OGC OGCT GCT
36864.0 73728.0 36864.0 1036288.0 742 186.860 221 147.621 334.481
----
Sample -class option
[source, shell]
----
$ jstat -class 44265
Loaded Bytes Unloaded Bytes Time
3063 7777.3 1 0.0 1.14
----
Sample -gc option
[source, shel]
----
$ jstat -gc 44265
NGU OGU PGU JHMX NGC NGCT OGC OGCT GCT
36864.0 73728.0 36864.0 1036288.0 742 186.860 221 147.621 334.481
----
Sample -gccause option
[source, shell]
----
$ jstat -gccause 44265
JavaHeapPercentUsed NGU OGU PGU JHMX NGC NGCT OGC OGCT LGCC GCC
14.23 36864.0 73728.0 36864.0 1036288.0 742 186.860 221 147.621 No GC No GC
----
Sample -gcnew option
[source, shell]
----
$ jstat -gcnew 44265
NGU JHMX NGC OGC NGCT
36864.0 1036288.0 742 221 186.860
----
Sample -gcold option
[source, shell]
----
$ jstat -gcold 44265
PGU OGU JHMX NGC OGC OGCT GCT
36864.0 73728.0 1036288.0 742 221 147.621 334.481
----
Sample -gcutil option
[source, shell]
----
$ jstat -gcutil 44265
JavaHeapPercentUsed JHMX NGC NGCT OGC OGCT GCT
14.23 1036288.0 742 186.860 221 147.621 334.481
----
Sample -stats option
[source, shell]
----
$ jstat -stats 44265
Loaded classInitTime classLinkedTime classVerifyTime sun.cls.time applicationTime safepointSyncTime safepointTime vmOperationTime NGC NGCT OGC OGCT
3063 0.759357 0.121911 0.250850 1.140906 1996.780026 0.450701 1.511731 1.663066 742 186.860000 221 147.621000
----
Sample -profile option
[source, shell]
----
$ jstat -profile 44265
Loaders IDedLoaders Class SpecLoad SpecInit Loaded Inited Developed Method T1E T1C T2E T2C Profiled ProfUsed Warn Error
21 2 3065 2947 1697 2927 2274 1445 1407 230 220 221 831 797 261 0
----
Sample -profileerrors option
[source, shell]
----
$ jstat -profile 44265
Warn ColClass SpecLoadFail UnmatchLoad RepLoad OverDeveloped Error ColLoader UnresLoaders UnresClass SpecInitFail UnresMthod ColMathod
18 1 0 15 0 2 0 0 0 0 0 0 0
----
Sample -deopt option
[source, shell]
----
$ jstat -deopt 44265
CHA UnreachedIf UnreachedCall Unloaded Uninit Unexpected Null StuckInLoop NotEntrant Cast Range Throw Div0 UncountedLoops Jvmti Other
13 6 13 0 0 2 1 0 0 3 0 0 0 0 0 0
----
See also Using jstat with ReadyNow Profile.
== Output Header Descriptions
[opts="header"] |
|Header |Description
|applicationTime
|Time called
|Bytes
|Bytes consumed
|classInitTime
|Time called
|classLinkedTime
|Time called
|classVerifyTime
|Time called
|GCC
|GC cause
|GCT
|Both generation collectors total GC time
|JavaHeapPercentUsed
|Percent of memory used by Java heap
|JHMX
|Java heap Xmx value
|Loaded
|Processes loaded
|LGCC
|Last GC cause
|NGC
|New generation GC count
|NGCT
|New generation GC time (concurrent time the collector is running)
|OGC
|Old generation GC count (at that instant)
|OGCT
|Old generation GC time (concurrent time the collector is running)
|NGU
|New generation use (at that instant)
|OGU
|Old generation use (at that instant)
|PGU
|Permanent generation use
|safepointSyncTime
|Time called
|safepointTime
|Time called
|sun.cls.time
|Time called
|Time
|Elapsed time
|Unloaded
|Processes unloaded
|vmOperationTime
|Time called
== Zing Mini-Core File Option
:page-published: false
[cols="4,4,2", opts="header"] |
|Command-Line Option |Description |Default
|-XX:[+/-]DumpMiniCore
a|This option creates significantly smaller Zing core files. This option is specified through the Java application launch command and applied to the runtime Java application. It is not applied to the Zing host machine. When you use this option:
=== Zing Mini-Core File Requirements
The mini-core file option requires ZST 5.7.5 or later and Zing 5.10.x or later.
If the option is specified and either the ZST version or Zing version is not compatible, a message is issued.
* If the ZST version supports the -XX:+DumpMiniCore option, but the Zing version does not, an Unrecognized VM option warning is printed to STDERR. For example:
+
[source, shell]
----
$ <my dir>/jdk6/x86_64/product/bin/java -XX:+DumpMiniCore -version
Zing 64-Bit Tiered VM error: Unrecognized VM option '+DumpMiniCore'
Could not create the Java virtual machine.
----
* If the Zing version supports the -XX:+DumpMiniCore option, but the ZST version does not, a warning message is issued. For example:
+
[source, shell]
----
$ /bin/java -jar -XX:+DumpMiniCore -version
Zing VM Warning: -XX:+DumpMiniCore is not supported by this ZST (found API version 0x5e, requires API version >= 0x5f)
java version "1.7.0-internal-zing_99.99.99.99.dev"
Zing Runtime Environment for Java Applications (build 1.7.0-internal-zing_99.99.99.99.dev-b25)
Zing 64-Bit Tiered VM (build 1.7.0-zing_99.99.99.99.dev-b501-product-azlinuxM-X86_64, mixed mode)
----
=== Setting the Zing Mini-Core File Option
Include the option -XX:+DumpMiniCore with your Java launch command.
Some failures cannot be effectively diagnosed with a mini-core file. In this case, Azul support may request that you try to reproduce the failure and produce a full-sized core file, by removing -XX:+DumpMiniCore from your Java launch command.
* When -XX:+DumpMiniCore option is not specified, a full core file, including the application objects stored in the Java heap, is created if Zing crashes.
* When -XX:+DumpMiniCore option is specified, a core file, that does not include the application objects stored in the Java heap, is created if Zing crashes.
== Speculative Locking Options
Speculative Locking in Zing leverages the Intel® Transactional Synchronization Extensions (Intel® TSX) instruction set, to take advantage of the situation where there is lock contention between threads, but no data contention inside the locked region. If a multithreaded program can concurrently modify shared data, a synchronized block or method is usually necessary to ensure correctness. This causes lock contention. The synchronization is not necessary if the concurrent accesses are to different parts of the shared data. In other words, a lock is not necessary when there is no data contention inside the locked region. For example, two different threads can modify a hash table concurrently without taking a lock, if they change values in different buckets of the hash table. Speculative Locking elides locks by speculating that there is no data contention. It does so by starting a transaction using Intel TSX instructions. If the speculation turns out to be wrong, the Intel TSX enabled CPU will detect it, abort the transaction and roll back execution to the start of lock. If a transaction gets aborted, the VM, using certain heuristics, either retries speculation or just acquires the lock as usual. The heuristic maintains aborted or attempted transactions for every speculated lock and disables speculation on that lock if it detects a high aborted or attempted value.
The following table summarizes the command-line options that control the use of speculative locking in Zing. The command lines options are case-sensitive.
:page-published: false
[cols="4,4,2", opts="header"] |
|Command-Line Option |Description |Default
|-XX:[+/-]UseRTMLocking
a|Enables speculative locking.
|false
|-XX:[+/-]RTMHeuristic
a|Enables (Restricted Transactional Memory) RTM heuristics.
|true
|-XX:RTMAbortRatio=<threshold value>
a|Threshold value for RTM heuristics. If aborted or attempted transactions ratio goes beyond this limit for a monitor then speculation is disabled for that monitor.
|50
|-XX:RTMRetryCount=<attempts>
a|Number of times speculation is attempted on a monitor, per lock acquisition. Fewer, or no attempts will be made if internal heuristic disables speculation on the monitor.
|5
|-XX:LockingMode=<1,2>
a|JDK 25 implements a new lightweight locking scheme. To use the legacy Zing locking scheme in JDK 25, you can use the command line option -XX:LockingMode=1. The legacy locking scheme, -XX:LockingMode=1, remains the default for JDK 8, 11, 17 and 21.
|2 in JDK 25+, 1 in all previous JDK versions.
Note that RTMHeuristic, RTMAbortRatio, and RTMRetryCount options are meaningful if the UseRTMLocking option is true.
[#_falcon_compiler_options]
== Falcon Compiler Options
The Falcon compiler is an optimizing JIT (Just-In-Time) compiler that is the default Zing compiler starting from Zing release 17.03.0.0. Below are the Falcon-specific command-line options:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command-Line Option |Description |Default
|-XX:[+/-]UseFalcon
a|Specifies which Tier 2 compiler should be used. The default Tier 2 compiler is Falcon. To use the C2 JIT (available until release 24.02) instead of the Falcon JIT, run the following command:
$JAVA_HOME/bin/java -XX:-UseFalcon –cp . myprog
|
|-Xcompilerflags:ignore\|warn\|error
a|Controls the handling of a Tier 2 compiler specific flag used when the other compiler is active.
| warn
|-XX:[+/-]UseFalconOSR
a|Controls the On Stack Replacement (OSR) functionality. It is not recommended to disable this option. If needed, disable it for only diagnostics purposes.
| true
|-XX:Tier2OSRThreshold=<threshold value>
a|Changes the threshold at which the OSR is triggered – that is loop compilation by the Tier 2 compiler.
The value might be decreased to improve warm-up characteristics.
| 14000
|-XX:FalconCompileThreshold=<threshold value>
a|Threshold value for the Falcon JIT compiler. Replaces the identical option of the C2 compiler (-XX:C2CompileThreshold) which was available until release 24.02.
| 10000
|-XX:CompileCommand
a|Sets the compile threshold for a particular method, used in the following way:
-XX:CompileCommand="option,<Class>::<method>,FalconCompileThreshold=<threshold value>"
|
|-XX:[+/-]UseKestrelC2
a|Disables Falcon and switches to the KestrelC2 compiler.
|
|-XX:FalconUseAVX
a|Specifies the highest supported AVX instructions set on x86/x64 CPUs.
|3
|-XX:[+/-]FalconUseLegacyInliner
a|This option is deprecated with no replacement starting with the release of Zing 20.02.0.0.
Switches back to the old implementation of the LLVM inliner instead of using a highly customized integrated inliner to perform inlining optimizations in Falcon compiles.
|false
|-XX:FalconOptimizationLevel=<3,2,1,0>
a|Controls the level of compiling optimization.
Suggested use: the default value is expected to fit most cases. However, if the CPU load at warmup is too high or warmup takes too long, there is a reason to try 1. The downside is that peak performance might be lower with that setting.
Accepts values from 0 to 3:
0 - minimal optimizations, lowest CPU consumption by Falcon (not recommended for production)
1 - reasonable optimizations and CPU time/warmup (good for production)
2 - aggressive optimizations, might expose high CPU utilization in some cases (default)
3 - turns on very aggressive optimizations known to cause long compilations and high CPU load at warmup. Ideally used with Cloud Native Compiler and ReadyNow to offset long compilation times.
|2 (full Falcon)
|-XX:[+/-]FalconPreserveBoxingIdentity
a|Disables aggressive optimization of boxing types (integer, double, etc.). Should only be used for applications which are found to rely on implementation defined behavior as opposed to the specified behavior of boxing routines.
| false
|-XX:FalconGenerateProfilerInfo=<value>
a|Specifies the method inlining detail level for performance profiling output of compiled code. Setting a lower level may help to reduce compiled code size by a few percent.
Accepts values from 0 to 2:
0 - no method inlining information is generated
1 - stack of inlined methods is generated only (default)
2 - stack of inlined methods with bytecode indices (bci) is generated
| 1
|-XX:[+/-]FalconCompensateForIntelMCUForErratumSKX102
a|Introduces a nop padding based mitigation for performance regressions seen on some systems following Intel’s micro code updates in response to errata SKX102.
This option is expected to become the default in a future Zing release.
If enabled, nop padding is used to align affected branches on systems with the micro code update applied.
| false
|-XX:[+/-]ForceFalconCompensateForIntelMCUForErratumSKX102
a|Forces generation of nop padded code on unaffected systems for performance validation.
| false
|-XX:[+/-]FalconOptBoxing
a|Enables the optimization to eliminate redundant boxing conversions.
| true
|-XX:[+/-]FalconLockCoarsenOverLoop
a|Enables a lock coarsening optimization for loops where the lock over a loop is coarsened. This is done by chunking the loop and coarsening the lock over the chunked loop.
| true
|-XX:[+/-]FalconEnableAggressiveLockOpt
a|Enables loop chunking by chunk size of 32 and performs lock coarsening over the loop. Additionally, enables lock coarsening over memory operations with monitor exit when valid to do so.
| true
|-XX:[+/-]UseMultiTiering
a|Enables Multi-Tiering, allowing Falcon to assign methods to more than just one Falcon optimization level, assigning methods for either mid-tier or final-tier compilation. Final-tier compilation uses the default Zing optimizations (usually Falcon optimization level 2) and mid-tier compilation uses Falcon optimization level 0.
| false
|-XX:[+/-]UseUnifiedCompilerFrontend
a|Allows CNC and Falcon to share the same frontend, enabling the CNC UnifiedCompiler directly in the VM. Disabling this feature tells the VM to use only the local Falcon compiler.
|true
|-XX:[+/-]UnifiedCompilerFrontendReplay
a|Allows us to collect more information about a crashing compile to improve reproducibility outside of the VM. Additional information is collected only for the Unified Compiler Frontend.
|true
|-XX:[+/-]FalconGenerateDiscriminators
a|Improves the quality of debug (DWARF) metadata received from the general assembly, which is beneficial for some diagnostic tooling.
|false
|-XX:PrintHotMethodsAssemblyProfileAtExit=<number of methods>
a|Prints an assembly level profiling report at the end of a run. The value specifies the number of methods to be printed. A negative value prints all methods and setting the value to 0 disables the feature.
|0
NOTE:
The Falcon compiler is available for Java 7, Java 8, Java 11, Java 13, and Java 15. An attempt to use the -XX:+UseFalcon option for Java 6 will cause a failure.
== Optimizer Hub Options
Below are the command-line options for Optimizer Hub to interact with Cloud Native Compiler and ReadyNow Orchestrator.
[#cloud-native-compiler-jvm-options]
=== Cloud Native Compiler JVM Options
NOTE: The minimum JVM options to request compilations from Cloud Native Compiler are -XX:OptHubHost=<host:port> and -XX:+CNCEnableRemoteCompiler.
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option | Description | Default
|-XX:OptHubHost=<host>[:<port>]
|<host> is the DNS name or IP address of the Optimizer Hub service. The part :<port> is optional, with port 50051 being used by default. See Connecting a JVM to Optimizer Hub for instructions to determine the correct host and port.
|null
|-XX:[+/-]CNCEnableRemoteCompiler
a|Allows usage of the remote compiler when Cloud Native Compiler has established a connection. Requires OptHubHost.
a|false
|-XX:ProfileName=<value>
a|Name of the profile to identify the application and its version, for example, my-spring-app-v1.2.3. This name allows multiple JVM instances that use the same profile name to share the Optimizer Hub functionality, such as the Cloud Native Compiler caching.
The ProfileName may only contain alphanumeric characters, and -, _, ., ~.
|null
|-XX:CNCEngineUploadAddress=<host:port>
a|Address to upload the compiler engine. Only needed when your Optimizer Hub has non-standard ports.
|
Note
|
Obsolete for Cloud Native Compiler 1.10 and above.
a|
|
|-XX:[+/-]CNCStartWithLocalCompiler
a|Enables the Falcon compiler at JVM startup and then disables it only upon failure to connect to Cloud Native Compiler.
|true
|-XX:CNCLocalFallbackOptLevelLimit=<3,2,1,0>
a|Limit the OptLevel for local compilations when Cloud Native Compiler is enabled.
See the Zing documentation > Falcon Compiler Options > -XX:FalconOptimizationLevel.
a|3
|-XX:[+/-]CNCLocalFallbackProductivityBasedTriggering
a|Enables CNC productivity-based local fallback. Other existing local fallback mechanisms like connection loss and server circuitbreaker are not controlled by this flag. Doesn’t impact telemetry collection or telemetry reporting.
|true
|-XX:CNCProductivityLocalCompilationRatePerCompilerThread=<compilations per second>
a|The number of compilations per second that a local compiler thread should be able to deliver when deciding to trigger local fallback.
+
Only when CNC productivity-based local fallback is enabled.
|5 - Derived from FalconOptimizationLevel and CNCLocalFallbackOptLevelLimit.
|-XX:CNCProductivityMinEvaluationWindowSeconds=<time window in seconds>
a|The minimum time window, in seconds, for productivity evaluation.
+
Only when CNC productivity-based local fallback is enabled.
|5
|-XX:CNCProductivityMinOutstandingCompilesForEvaluation=<number of outstanding compile requests>
a|The number of outstanding compile requests on the server before justifying local fallback.
+
Only when CNC productivity-based local fallback is enabled.
|100
|-XX:[+/-]OptHubUseSSL
a|Instructs the Zing JVM to communicate directly with Optimizer Hub without using SSL. Use this option if you installed Optimizer Hub without SSL.
a|true
|-XX:OptHubSSLRootsPath=<path to cert.pem>
a|Instructs the Zing JVM to use and trust a specified SSL certificate on the filesystem.
a|
|-Xlog:[+/-]concomp
a|Display messages describing communication with Optimizer Hub.
a|false
[#readynow-orchestrator-jvm-options]
=== ReadyNow Orchestrator JVM Options
The following options are available in Azul Prime when using the ReadyNow Orchestrator with Optimizer Hub:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:OptHubHost=<host>[:<port>]
|<host> is the DNS name or IP address of the Optimizer Hub service. The part :<port> is optional, with port 50051 being used by default. See Connecting a JVM to Optimizer Hub for instructions to determine the correct host and port.
|null
|-XX:ProfileName=<value>
a|Name of the profile to identify the application and its version, for example, my-spring-app-v1.2.3. This name allows multiple JVM instances that use the same profile name to share the Optimizer Hub functionality, such as the use of ReadyNow Orchestrator profiles.
The ProfileName may only contain alphanumeric characters, and -, _, ., ~.
|null
|-XX:[+/-]EnableRNO
|Enables ReadyNow read and write to ReadyNow Orchestrator. Requires OptHubHost and uses ProfileName as the name for the profile log.
a|false
|
-XX:ProfileLogOut=<value>
a|The ProfileLogOut enables Zing to record compilations from the current run. <value> is the name of the profile that the JVM reads as input to ReadyNow. If prefixed with opthub://, <value> is used as the profile name in ReadyNow Orchestrator. If not prefixed with opthub://, <value> is interpreted as a file path on the JVM.
|
Note
|
For local ReadyNow you often have to specify different names for ProfileLogIn and ProfileLogOut. But for ReadyNow Orchestrator you must only use ProfileName.
|null
|
|-XX:ProfileLogIn=<value>
a|The ProfileLogIn allows Zing to base its decisions on the information from a previous run. The current ProfileLogIn file information is read in its entirety - before Zing starts to create a new ProfileLogOut log. <value> is the name of the profile that the JVM reads as input to ReadyNow. If prefixed with opthub://, <value> is used as the profile name in ReadyNow Orchestrator. If not prefixed with opthub://, <value> is interpreted as a file path on the JVM.
|
Note
|
For local ReadyNow you often have to specify different names for ProfileLogIn and ProfileLogOut. But for ReadyNow Orchestrator you must only use ProfileName.
|null
|
|-XX:ProfileLogOutNominationMinSize
a|Indicate to server that the produced profile is eligible for promotion after specified amount of bytes recorded.
0 = any size eligible
-1 = never gets promoted
|1M
|-XX:ProfileLogOutNominationMinSizePerGeneration
a|Define minimum acceptable amount of bytes per generation which the profile size should reach to become eligible for promotion.
List of pair <generation>:<size>, separated by ,. For example:
0:1000000,1:10000000,2:25000000,3:50000000
For more information, check Understanding ReadyNow Orchestrator Generations.
|null
|-XX:ProfileLogOutNominationMinTimeSec
a|When used with ReadyNow Orchestrator, the minimum time, in seconds, a profile must record before ReadyNow Orchestrator can nominate it as a candidate.
0 = any duration eligible
-1 = never gets promoted
|120
|-XX:ProfileLogOutNominationMinTimeSecPerGeneration
a|When used with ReadyNow Orchestrator, the minimum time, in seconds, per generation during which the profile should be recorded in order to become eligible for promotion.
List of pair <generation>:<duration>, separated by ,. For example:
0:100,2:150
For more information, check Understanding ReadyNow Orchestrator Generations.
a|null
|-XX:ProfileLogOutMaxNominatedGenerationCount
a|When used with ReadyNow Orchestrator, specifies the maximum generation of a profile that a VM nominates.
This parameter has a server-side counterpart readyNowOrchestrator.producers.maxPromotableGeneration. The profile has to satisfy both settings to be promoted.
0 = unlimited
For more information, check Understanding ReadyNow Orchestrator Generations.
|0
|-XX:ProfileLogMaxSize=<value in bytes>
a|Specifies the maximum size that a ReadyNow profile log is allowed to reach. Profiles get truncated at this size, regardless of whether the application has actually been completely warmed up.
This parameter has a server-side counterpart readyNowOrchestrator.producers.maxProfileSize. The profile will be allowed to reach whatever is the smallest of both settings.
It is recommended to either not set this size explicitly, or set it generously if required, for example:
-XX:ProfileLogMaxSize=1G
0 = unlimited
|0
|-XX:ProfileLogTimeLimitSeconds=<value in seconds>
a|Instructs ReadyNow to stop adding to the profile log after a period of N seconds regardless of where the application has been completely warmed up. It is recommended to either not set this size explicitly, or set it generously if required.
0 = unlimited
|0
|-XX:ProfileLogDumpInputToFile=<name>
a|Dumps input profile to the specified path. For debugging purposes only.
|null
|-XX:ProfileLogDumpOutputToFile=<name>
a|Dumps output profile to the specified path. For debugging purposes only.
|null
|-XX:RNOConnectionTimeoutMillis
a|Timeout on establishing remote connection and timeout on interval between downloading two chunks. Specified in milliseconds.
|5000
|-XX:RNOProfileFallbackInput
a|Experimental feature. Local filesystem path which gets used in case no profile data is downloaded. E.g., in case of a missing connection or the requested profile name doesn’t exist on the server.
|null
|-XX:ProfileLogOutVerbose
a|Enables logging of verbose, optional tracing information in -XX:ProfileLogOut
|true
== CPU Budgeting Options
These CPU Budgeting options are applicable to the Falcon Tier 2 Compiler.
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:[+/-]EnableTier2CompilerBudgeting
a| Enables CPU budgeting options for the Tier 2 compiler.
|false
|-XX:CIMaxCompilerThreads=<number of threads>
a|Defines the maximum number of threads which can be dedicated to the compiler. This is overridden by -XX:CompilerTier2BudgetingCPUPercent and -XX:CompilerTier2BudgetingWarmupCPUPercent
|Dependent on the CPU count
|-XX:CIMaxCompilerThreadsPercent=<percent of threads>
a|Defines the maximum number of threads, as a percent, which can be dedicated to the compiler. The number of threads is rounded up to the nearest whole number. If you want to use a fractional number, use the option -XX:CompilerTier2BudgetingCPUPercent instead. -XX:CompilerTier2BudgetingCPUPercent overrides this flag.
|Dependent on the CPU count
|-XX:CompilerWarmupExtraThreads=<number of threads>
a|Defines how many extra threads over -XX:CIMaxCompilerThreads the Tier 2 compiler can use during warmup, during the duration specified by -XX:CompilerWarmupPeriodSeconds. After warmup, the value of -XX:CIMaxCompilerThreads shall be respected.
|0
|-XX:ProfilePreMainTier2ExtraCompilerThreads=<number of threads>
a|Defines how many extra threads over -XX:CIMaxCompilerThreads the Tier 2 compiler can use during warmup, before Main class is compiled.
|0
|-XX:CompilerWarmupPeriodSeconds=<value in seconds>
a|Defines how long the Tier 2 compiler warmup period shall be, in seconds.
|0
|-XX:CompilerTier2BudgetingWarmupCPUPercent=<value>
a|Specifies the CPU Percent which can be used for Tier 2 compilation during warmup, i.e. during the duration set with -XX:CompilerWarmupPeriodSeconds. The resulting value can be less than 1 or any other non-whole number. The Tier 2 compiler waits for this percent of CPU cores to be available before continuing. To use this option, you must have -XX:+EnableTier2CompilerBudgeting set to true. Note that 100 percent CPU usage is the limit of CPU cores available to the JVM environment, which can be defined by container limits and other factors outside of the JVM process.
|0
|-XX:CompilerTier2BudgetingCPUPercent=<value>
a|Specifies the CPU percent which can be used for Tier 2 compilation post warmup, i.e. after the duration set with -XX:CompilerWarmupPeriodSeconds. The resulting value can be less than 1 or any other non-whole number. To use this option, you must have -XX:+EnableTier2CompilerBudgeting set to true. Note that 100 percent CPU usage is the limit of CPU cores available to the JVM environment, which can be defined by container limits and other factors outside of the JVM process.
|67
|-XX:CompilerTier2BudgetWindowDurationMs=<value in ms>
a|Specifies a window of time, in ms, in which the average CPU consumption of the compiler shall not exceed -XX:CompilerTier2BudgetingCPUPercent. To use this option, you must have -XX:+EnableTier2CompilerBudgeting set to true.
|1000
Example for using CPU budgeting options:
[source, shell]
----
-XX:+EnableTier2CompilerBudgeting
-XX:CompilerWarmupPeriodSeconds=120
-XX:CompilerTier2BudgetingWarmupCPUPercent=80
-XX:CompilerTier2BudgetingCPUPercent=33
----
This example specifies the maximum number of threads allocated to the Falcon compiler at 80% of the number of CPU cores for the first 120 seconds of the start of your application. After this warmup period, the maximum number of threads allocated to the Falcon compiler drops to 33%.
[#compilation_ranks]
== Compilation Ranks by Priority
These options allow the Falcon Tier 2 Compiler to assign compilation ranks to methods based on _min-time-between-promotions. Each method, based on its min-time-between-promotions value, is assigned a rank: hot, warm, or cold. For more information on compilation ranks, see Analyzing and Tuning Warmup.
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:TopTierCompileThresholdTriggerMillis=<value in ms>
a|Previously TopTierCompileThresholdMs - Controls the triggering time limit (in ms) in which the method needs to reach the compile threshold in order to be queued for compilation. If the threshold is reached, but not within this time limit, the method is ignored and the timer starts over again.
This option assigns the same value to TopTierHotCompileThresholdTriggerMillis and TopTierWarmCompileThresholdTriggerMillis, creating a boundary between hot and cold ranks while eliminating the warm rank.
This option must not be set if you are using TopTierHotCompileThresholdTriggerMillis and TopTierWarmCompileThresholdTriggerMillis to specify hot, warm, and cold ranks.
|600000
|-XX:TopTierHotCompileThresholdTriggerMillis=<value in ms>
a|Sets an upper bound for min-time-between-promotions for the hot rank and a lower bound for the warm rank. The upper bound for the hot rank is 1ms less than the value set.
|60000
|-XX:TopTierWarmCompileThresholdTriggerMillis=<value in ms>
a|Sets the upper bound for min-time-between-promotions for the warm rank and lower bound for the cold rank. The upper bound for the warm rank is 1ms less than the value set.
|600000
|-XX:TopTierWarmCompileCpuPercent
a|Specifies the percentage of CPU time from the total budget available to compiler threads that can be spent on warm rank compilation. hot ranks are given 100% and cold ranks are given 0%.
|25
The default settings for compilation ranking by priority sets the following ranks:
- hot: 0-59999ms min-time-between-promotions, budget 100%
- cold: 60000-599999ms min-time-between-promotions, budget 25%
- skip: 600000ms-inf min-time-between-promotions, budget 0%
== ReadyNow Options
Below are the ReadyNow-specific command-line options:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:ProfileLogOut=<filename>
a|ProfileLogOut enables Zing to record compilations from the current run. <filename> is the name of the profile that the JVM reads as input to ReadyNow. If prefixed with cnc://, it will attempt to pull the profile from Cloud Native Compiler.
If ReadyNow is configured as a rolling profile (with ProfileLogIn equal to ProfileLogOut), The JVM creates a backup of the input profile at startup before the profile is being read into memory. Otherwise, the file will be overwritten.
|null
|-XX:ProfileLogIn=<filename>
a|ProfileLogIn allows Zing to base its decisions on the information from a previous run. The current ProfileLogIn file information will be read in its entirety - before Zing starts to create a new ProfileLogOut log. <filename> is the name of the profile that the JVM reads as input to ReadyNow. If prefixed with cnc://, it will attempt to pull the profile from Cloud Native Compiler.
|null
|-XX:ProfileLogName=<name>
a|Name of the profile that the JVM both reads from and writes to. If prefixed with cnc://, it will attempt to write from Cloud Native Compiler.
Replaces ProfileLogIn and ProfileLogOut. Can be used in place of -XX:ProfileLogIn=<profile1> -XX:ProfileLogOut=<profile1>
|null
|-XX:ProfileLogDumpInputToFile=<name>
a|Dump input profile to the specified path. For debugging purposes only.
|null
|-XX:ProfileLogDumpOutputToFile=<name>
a| Dump output profile to the specified path. For debugging purposes only.
|null
|-XX:ProfileLogMaxSize=<value>[K\|M\|G]
a|Specifies the maximum size that a ReadyNow profile log is allowed to reach. Units can be specified in kilobytes (K or k), megabytes (M or m), or gigabytes (G or g). Profiles will be truncated at this size, regardless of whether the application has actually been completely warmed up. It is recommended to either not set this size explicitly, or set it generously if required, for example:
-XX:ProfileLogMaxSize=1G
0 = unlimited
|0
|-XX:ProfileLogOutMaxNominatedGenerationCount=<value>
a|When used with Cloud Native Compiler, specifies the maximum generation of a profile that a VM will nominate. If ContinueRecordingAfterPromotion (CNC server-side parameter) is set to false (default), then the JVM will not output another generation after this limit has been reached. If ContinueRecordingAfterPromotion is true, the JVM will output another generation to Cloud Native Compiler but will never nominate it. These additional generations are for debugging and analysis only.
0 = unlimited
|0
|-XX:ProfileLogOutNominationMinTimeSec=<value in seconds>
a|When used with Cloud Native Compiler, the minimum time, in seconds, a profile must record before CNC will nominate it as a candidate. If no -XX:ProfileLogOutNominationMinTimeSec is set, then the candidate is nominated by CNC when -XX:ProfileLogTimeLimitSeconds is reached.
0 = any duration eligible, -1 means it will never be promoted
|120
|-XX:ProfileLogTimeLimitSeconds=<value in seconds>
a|Instructs ReadyNow to stop adding to the profile log after a period of N seconds regardless of where the application has been completely warmed up. It is recommended to either not set this size explicitly, or set it generously if required.
0 = unlimited
|0
|-XX:ProfileLogServiceConnectionTimeoutMillis=<value in ms>
a| Timeout on establishing remote connection and timeout on interval between downloading two chunks. Specified in milliseconds.
|5000
|-XX:ProfileLogOutNominationMinSize=<value in bytes>
a|Indicate to server that the produced profile is eligible for promotion after specified amount of bytes recorded.
0 = any size eligible, -1 means it will never be promoted
|1m
|-XX:[+/-]ProfileLogOutVerbose
a|Enables logging of verbose, optional tracing information in -XX:ProfileLogOut
|true
|-XX:ProfilePersistCodeProfilesPeriodSec=<value in seconds>
a|Enables periodic dumping of runtime bytecode profiling counters to the ReadyNow profile log at the interval specified, in addition to the regular on-demand ReadyNow profile log writes. If you set the option to 0, a dump of the additional information occurs only on a graceful JVM shutdown.
|-1, disabled
=== Compile Stashing Options
Compile Stashing is a Zing feature that caches compiles performed in one run and reuses them in subsequent runs.
For more information on Compile Stashing, see Using Compile Stashing
Use the following command-line options to control caching and enable reporting:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:[+/-]FalconUseCompileStashing
a|Enables/disables Compile Stashing, populates the cache.
|false. Before 19.12.0.0, true if -XX:ProfileLogOut is set.
|-XX:FalconObjectCacheRoot=<path>
a|Sets the cache location. By default, different instances of Zing running on the same host share the same stash location. However, different instances can be configured to use different locations via the FalconObjectCacheRoot option.
|$HOME/.zing/falcon-cache/<zvm_version>/
|-XX:[+/-]FalconLoadObjectCache
a|Enables loading from compile cache.
|false
|-XX:[+/-]FalconSaveObjectCache
a|Enables saving to compile cache.
|false
|-XX:FalconMaxStashedCompileSize=<max_size in bytes>
a|Specifies the maximum size of a stashed compile entry. When running multiple virtual machines concurrently, different cache sizes for different virtual machines are not recommended. Similar cache sizes are advised.
|0
|-XX:FalconMaxCacheSize=<max_size in bytes>
a|Specifies the maximum size of the compile cache.
|10 GB
|-XX:[+/-]FalconObjectCachePrintReport
a|Prints stashing statistics.
|false
|-XX:[+/-]FalconObjectCachePrintPrecompilationReport
a|Prints stashing report at the end of ReadyNow precompilation.
|false
== Tick Profiler Options
The Tick Profiler provides information to allow calculation of how processor resources are used for an interval of recorded time. Below is the Tick Profiler-specifc command-line option:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:[+/-]UseTickProfiler
a|Enables and disables profiling of processor core time spent between various software execution units (for example, threads, methods, and run-time tasks).
Due to known issues with version 3.10 and earlier Linux kernels, including those used in RHEL 7.x and CentOS 7.x, using +UseTickProfiler in production should be done with caution, as potential hangs may result under heavy loads.
|false
== Out-of-Memory Options
Out-of-Memory command-line options let the JVM handle out-of-memory occurrences:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:[+/-]ExitOnOutOfMemoryError
a|Enables the JVM exit on the first occurrence of an out-of-memory error. Useful if you prefer restarting an instance of the JVM to handling out of memory errors.
|false
|-XX:[+/-]CrashOnOutOfMemoryError
a|Enables the JVM crash and produce text and binary crash files when an out-of-memory error occurs.
|false
== Flight Recorder Options
Flight Recorder command-line options gather and register events that help to understand the behavior of a Java Application and Zing:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command Line Option |Description |Default
|-XX:[+/-]FlightRecorder
a|The Java Flight Recorder (JFR) is always available in Zing, this flag is not needed to use JFR.
This flag is useful only to prevent JFR from being activated by users or from within an application. That can be achieved by adding -XX:-FlightRecorder to the command line. It gives no performance benefit.
See Using Java Flight Recorder for details.
|false
JFR remains available until -XX:-FlightRecorder is set
|-XX:StartFlightRecording
a|Starts a flight recording from the command line with recording parameters provided as a value for this option.
For example, -XX:StartFlightRecording=filename=myrecording.jfr starts a recording in the file system while -XX:StartFlightRecording=disk=false,filename=myrecording.jfr starts an in-memory recording. In both cases the result is written to the myrecording.jfr file at the end of the JVM session. For the description of additional Java Flight Recording (JFR) parameters refer to JFR resources available in the Internet.
|null
|-XX:FlightRecorderOptions
a|Specifies additional parameters to configure Java Flight Recorder (JFR). For the description of additional JFR parameters refer to JFR resources available in the Internet.
|null
|-XX:JFRDescribeLiveSetPercentage=<value>
a|Specifies the percentage amount of a live set to be described by recorded JFR events. To omit some minor events from the recording, change the value of this option to a smaller number, e.g., 90.
|99
|-XX:[+/-]UseTickProfilerAsJFRThreadSampler
a|Enables Zing to use the Tick Profiler instead of the JFR Thread Sampler. When set to true, EventExecutionSample JFR events are generated from data provided by the Tick Profiler.
|true
|-XX:TickProfilerNotifierIntervalMillis=<value in ms>
a|Controls the interval between consecutive polls for the new Tick Profiler samples to pass them to the JFR in-memory buffer. This option has an effect only when -XX:+UseTickProfilerAsJFRThreadSampler is specified.
|200
== Zing MXBean Options
Zing MXBean command-line options help monitor the Zing heap utilization:
:page-published: false
[cols="4,4,2", opts="header"] |
|Command-Line Option |Description | Default
|-XX:[+/-]ReportUsedAsCommitted
a|The MemoryMXBean.getHeapMemoryUsage() method of MXBeans API returns the value of the Committed memory equal to the amount of JVM heap memory guaranteed as available for running an application (see Understanding Heap Memory Management for details). To switch to the old behavior of the MXBeans interface that returned the value of the Committed memory equal to Used memory, change the value of this option to true.
|false
|-XX:[+/-]MimicG1GCMemoryManagerNames
a|Changes garbage collector names returned by GarbageCollectorMXBean from GPGC to G1. To define exact New and Old GC names use -XX:GPGCNewGCMemoryManagerName="GPGC New" and -XX:GPGCOldGCMemoryManagerName="GPGC Old" respectively. This option provides a workaround for applications that do not recognize GPGC names such as Logstash.
|false
|-XX:GPGCNewGCMemoryManagerName=<New collector name>
a|Sets the name returned by GarbageCollectorMXBean for the New generation collector.
|GPGC New
|-XX:GPGCOldGCMemoryManagerName=<Old collector name>
a|Sets the name returned by GarbageCollectorMXBean for the Old generation collector.
|GPGC Old
|-XX:[+/-]IncludeNonObjectHeapInReportedJavaHeap
a|Makes Java heap reporting APIs and Tools include "non-object" use.
|false
|-XX:[+/-]ReportConstantMaxPossibleHeapAsMaxJavaHeap
a|Lets APIs which report max heap capacity be aware of elasticity.
|false