The Java-OpenJDK optimization pack enables the ability to optimize Java applications based on the OpenJDK and Oracle HotSpot JVM. Through this optimization pack, Akamas is able to tackle the problem of performance of JVM-based applications from both the point of view of cost savings and quality of service.
To achieve these goals the optimization pack provides parameters that focus on the following areas:
Garbage collection
Heap
JIT
Similarly, the bundled metrics provide visibility on the following aspects of tuned applications:
Heap and memory utilization
Garbage collection
Execution threads
The optimization pack supports the most used versions of OpenJDK and Oracle HotSpot JVM.
Here’s the command to install the Java OpenJDK optimization pack using the Akamas CLI:
For more information on the process of installing or upgrading an optimization pack refer to Install Optimization Packs.
Component Type | Description |
---|---|
Java OpenJDK 8 JVM
Java OpenJDK 11 JVM
This page describes the Optimization Pack for Java OpenJDK 11 JVM.
The following parameters require their ranges or default values to be updated according to the described rules:
The following tables show a list of constraints that may be required in the definition of the study, depending on the tuned parameters:
This page describes the Optimization Pack for Java OpenJDK 8 JVM.
The following parameters require their ranges or default values to be updated according to the described rules:
The following tables show a list of constraints that may be required in the definition of the study, depending on the tuned parameters:
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Name | Type | Unit | Dafault | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Formula | Notes |
---|
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Metric | Unit | Description |
---|
Name | Type | Unit | Dafault | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Name | Type | Unit | Default | Domain | Restart | Description |
---|
Formula | Notes |
---|
mem_used | bytes | The total amount of memory used |
requests_throughput | requests/s | The number of requests performed per second |
requests_response_time | milliseconds | The average request response time |
jvm_heap_size | bytes | The size of the JVM heap memory |
jvm_heap_used | bytes | The amount of heap memory used |
jvm_heap_util | percent | The utilization % of heap memory |
jvm_memory_used | bytes | The total amount of memory used across all the JVM memory pools |
jvm_memory_used_details | bytes | The total amount of memory used broken down by pool (e.g., code-cache, compressed-class-space) |
jvm_memory_buffer_pool_used | bytes | The total amount bytes used by buffers within the JVM buffer memory pool |
cpu_util | percent | The average CPU utilization % across all the CPUs (i.e., how much time on average the CPUs are busy doing work) |
cpu_used | CPUs | The total amount of CPUs used |
jvm_gc_time | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities |
jvm_gc_time_details | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities broken down by type of garbage collection algorithm (e.g., ParNew) |
jvm_gc_count | collections/s | The total number of stop the world JVM garbage collections that have occurred per second |
jvm_gc_count_details | collections/s | The total number of stop the world JVM garbage collections that have occurred per second, broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_gc_duration | seconds | The average duration of a stop the world JVM garbage collection |
jvm_gc_duration_details | seconds | The average duration of a stop the world JVM garbage collection broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_threads_current | threads | The total number of active threads within the JVM |
jvm_threads_deadlocked | threads | The total number of deadlocked threads within the JVM |
jvm_compilation_time | milliseconds | The total time spent by the JVM JIT compiler compiling bytecode |
jvm_minHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The inimum heap size. |
jvm_maxHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum heap size. |
jvm_maxRAM | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum amount of memory used by the JVM. |
jvm_initialRAMPercentage | real | percent |
|
| yes | The initial percentage of memory used by the JVM. |
jvm_maxRAMPercentage | real | percent |
|
| yes | The percentage of memory used for maximum heap size. Requires Java 10, Java 8 Update 191 or later. |
jvm_alwaysPreTouch | categorical |
|
| yes | Pretouch pages during initialization. |
jvm_metaspaceSize | integer | megabytes |
| You should select your own domain. | yes | The initial size of the allocated class metadata space. |
jvm_maxMetaspaceSize | integer | megabytes |
| You should select your own domain. | yes | The maximum size of the allocated class metadata space. |
jvm_useTransparentHugePages | categorical |
|
| yes | Enables the use of large pages that can dynamically grow or shrink. |
jvm_allocatePrefetchInstr | integer |
|
| yes | Prefetch ahead of the allocation pointer. |
jvm_allocatePrefetchDistance | integer | bytes |
|
| yes | Distance to prefetch ahead of allocation pointer. -1 use system-specific value (automatically determined). |
jvm_allocatePrefetchLines | integer | lines |
|
| yes | The number of lines to prefetch ahead of array allocation pointer. |
jvm_allocatePrefetchStyle | integer |
|
| yes | Selects the prefetch instruction to generate. |
jvm_useLargePages | categorical |
|
| yes | Enable the use of large page memory. |
jvm_aggressiveHeap | categorical |
|
| yes | Optimize heap options for long-running memory intensive apps. |
jvm_newSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Sets the initial and maximum size of the heap for the young generation (nursery). |
jvm_maxNewSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Specifies the upper bound for the young generation size. |
jvm_survivorRatio | integer |
|
| yes | The ratio between the Eden and each Survivor-space within the JVM. For example, a jvm_survivorRatio would mean that the Eden-space is 6 times one Survivor-space. |
jvm_useAdaptiveSizePolicy | categorical |
|
| yes | Enable adaptive generation sizing. Disable coupled with jvm_targetSurvivorRatio. |
jvm_adaptiveSizePolicyWeight | integer | percent |
|
| yes | The weighting given to the current Garbage Collection time versus previous GC times when checking the timing goal. |
jvm_targetSurvivorRatio | integer |
|
| yes | The desired percentage of Survivor-space used after young garbage collection. |
jvm_minHeapFreeRatio | integer | percent |
|
| yes | The minimum percentage of heap free after garbage collection to avoid shrinking. |
jvm_maxHeapFreeRatio | integer | percent |
|
| yes | The maximum percentage of heap free after garbage collection to avoid shrinking. |
jvm_maxTenuringThreshold | integer |
|
| yes | The maximum value for the tenuring threshold. |
jvm_gcType | categorical |
|
| yes | Type of the garbage collection algorithm. |
jvm_useParallelOldGC | categorical |
|
| yes | Enables Parallel Mark and Compact Garbage Collection in Old/Tenured generations. |
jvm_concurrentGCThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of threads concurrent garbage collection will use. |
jvm_parallelGCThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of threads garbage collection will use for parallel phases. |
jvm_maxGCPauseMillis | integer | milliseconds |
|
| yes | Adaptive size policy maximum GC pause time goal in millisecond. |
jvm_resizePLAB | categorical |
|
| yes | Enables the dynamic resizing of promotion LABs. |
jvm_GCTimeRatio | integer |
|
| yes | The target fraction of time that can be spent in garbage collection before increasing the heap, computet as 1 / (1 + GCTimeRatio). |
jvm_initiatingHeapOccupancyPercent | integer |
|
| yes | Sets the percentage of the heap occupancy at which to start a concurrent GC cycle. |
jvm_youngGenerationSizeIncrement | integer | percent |
|
| yes | The increment size for Young Generation adaptive resizing. |
jvm_tenuredGenerationSizeIncrement | integer | percent |
|
| yes | The increment size for Old/Tenured Generation adaptive resizing. |
jvm_adaptiveSizeDecrementScaleFactor | integer | percent |
|
| yes | Specifies the scale factor for goal-driven generation resizing. |
jvm_CMSTriggerRatio | integer |
|
| yes | The percentage of MinHeapFreeRatio allocated before CMS GC starts |
jvm_CMSInitiatingOccupancyFraction | integer |
|
| yes | Configure oldgen occupancy fraction threshold for CMS GC. Negative values default to CMSTriggerRatio. |
jvm_CMSClassUnloadingEnabled | categorical |
|
| yes | Enables class unloading when using CMS. |
jvm_useCMSInitiatingOccupancyOnly | categorical |
|
| yes | Use of the occupancy value as the only criterion for initiating the CMS collector. |
jvm_G1HeapRegionSize | integer | megabytes |
|
| yes | Sets the size of the regions for G1. |
jvm_G1ReservePercent | integer |
|
| yes | Sets the percentage of the heap that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector. |
jvm_G1NewSizePercent | integer |
|
| yes | Sets the percentage of the heap to use as the minimum for the young generation size. |
jvm_G1MaxNewSizePercent | integer |
|
| yes | Sets the percentage of the heap size to use as the maximum for young generation size. |
jvm_G1MixedGCLiveThresholdPercent | integer |
|
| yes | Sets the occupancy threshold for an old region to be included in a mixed garbage collection cycle. |
jvm_G1HeapWastePercent | integer |
|
| yes | The maximum percentage of the reclaimable heap before starting mixed GC. |
jvm_G1MixedGCCountTarget | integer | collections |
|
| yes | Sets the target number of mixed garbage collections after a marking cycle to collect old regions with at most |
jvm_G1OldCSetRegionThresholdPercent | integer |
|
| yes | The upper limit on the number of old regions to be collected during mixed GC. |
jvm_G1AdaptiveIHOPNumInitialSamples | integer |
|
| yes | The number of completed time periods from initial mark to first mixed GC required to use the input values for prediction of the optimal occupancy to start marking. |
jvm_G1UseAdaptiveIHOP | categorical |
|
| yes | Adaptively adjust the initiating heap occupancy from the initial value of |
jvm_reservedCodeCacheSize | integer | megabytes |
|
| yes | The maximum size of the compiled code cache pool. |
jvm_tieredCompilation | categorical |
|
| yes | The type of the garbage collection algorithm. |
jvm_tieredCompilationStopAtLevel | integer |
|
| yes | Overrides the number of detected CPUs that the VM will use to calculate the size of thread pools. |
jvm_compilationThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of compilation threads. |
jvm_backgroundCompilation | categorical |
|
| yes | Allow async interpreted execution of a method while it is being compiled. |
jvm_inline | categorical |
|
| yes | Enable inlining. |
jvm_maxInlineSize | integer | bytes |
|
| yes | The bytecode size limit (in bytes) of the inlined methods. |
jvm_inlineSmallCode | integer | bytes |
|
| yes | The maximum compiled code size limit (in bytes) of the inlined methods. |
jvm_aggressiveOpts | categorical |
|
| yes | Turn on point performance compiler optimizations. |
jvm_usePerfData | categorical |
|
| yes | Enable monitoring of performance data. |
jvm_useNUMA | categorical |
|
| yes | Enable NUMA. |
jvm_useBiasedLocking | categorical |
|
| yes | Manage the use of biased locking. |
jvm_activeProcessorCount | integer | CPUs |
|
| yes | Overrides the number of detected CPUs that the VM will use to calculate the size of thread pools. |
Parameter | Default value | Domain |
jvm_minHeapSize | Depends on the instance available memory |
jvm_maxHeapSize | Depends on the instance available memory |
jvm_newSize | Depends on the configured heap |
jvm_maxNewSize | Depends on the configured heap |
jvm_concurrentGCThreads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm_parallelGCThreads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm_compilation_threads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm.jvm_minHeapSize <= jvm.jvm_maxHeapSize |
jvm.jvm_minHeapFreeRatio <= jvm.jvm_maxHeapFreeRatio |
jvm.jvm_maxNewSize < jvm.jvm_maxHeapSize * 0.8 |
jvm.jvm_concurrentGCThreads <= jvm.jvm_parallelGCThreads |
jvm_activeProcessorCount < container.cpu_limits/1000 + 1 |
mem_used | bytes | The total amount of memory used |
requests_throughput | requests/s | The number of requests performed per second |
requests_response_time | milliseconds | The average request response time |
jvm_heap_size | bytes | The size of the JVM heap memory |
jvm_heap_used | bytes | The amount of heap memory used |
jvm_heap_util | percent | The utilization % of heap memory |
jvm_memory_used | bytes | The total amount of memory used across all the JVM memory pools |
jvm_memory_used_details | bytes | The total amount of memory used broken down by pool (e.g., code-cache, compressed-class-space) |
jvm_memory_buffer_pool_used | bytes | The total amount bytes used by buffers within the JVM buffer memory pool |
cpu_util | percent | The average CPU utilization % across all the CPUs (i.e., how much time on average the CPUs are busy doing work) |
cpu_used | CPUs | The total amount of CPUs used |
jvm_gc_time | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities |
jvm_gc_time_details | percent | The % of wall clock time the JVM spent doing stop the world garbage collection activities broken down by type of garbage collection algorithm (e.g., ParNew) |
jvm_gc_count | collections/s | The total number of stop the world JVM garbage collections that have occurred per second |
jvm_gc_count_details | collections/s | The total number of stop the world JVM garbage collections that have occurred per second, broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_gc_duration | seconds | The average duration of a stop the world JVM garbage collection |
jvm_gc_duration_details | seconds | The average duration of a stop the world JVM garbage collection broken down by type of garbage collection algorithm (e.g., G1, CMS) |
jvm_threads_current | threads | The total number of active threads within the JVM |
jvm_threads_deadlocked | threads | The total number of deadlocked threads within the JVM |
jvm_compilation_time | milliseconds | The total time spent by the JVM JIT compiler compiling bytecode |
jvm_minHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The inimum heap size. |
jvm_maxHeapSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum heap size. |
jvm_maxRAM | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | The maximum amount of memory used by the JVM. |
jvm_initialRAMPercentage | real | percent |
|
| yes | The initial percentage of memory used by the JVM. |
jvm_maxRAMPercentage | real | percent |
|
| yes | The percentage of memory used for maximum heap size. Requires Java 10, Java 8 Update 191 or later. |
jvm_alwaysPreTouch | categorical |
|
| yes | Pretouch pages during initialization. |
jvm_metaspaceSize | integer | megabytes |
| You should select your own domain. | yes | The initial size of the allocated class metadata space. |
jvm_maxMetaspaceSize | integer | megabytes |
| You should select your own domain. | yes | The maximum size of the allocated class metadata space. |
jvm_useTransparentHugePages | categorical |
|
| yes | Enables the use of large pages that can dynamically grow or shrink. |
jvm_allocatePrefetchInstr | integer |
|
| yes | Prefetch ahead of the allocation pointer. |
jvm_allocatePrefetchDistance | integer | bytes |
|
| yes | Distance to prefetch ahead of allocation pointer. -1 use system-specific value (automatically determined). |
jvm_allocatePrefetchLines | integer | lines |
|
| yes | The number of lines to prefetch ahead of array allocation pointer. |
jvm_allocatePrefetchStyle | integer |
|
| yes | Selects the prefetch instruction to generate. |
jvm_useLargePages | categorical |
|
| yes | Enable the use of large page memory. |
jvm_newSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Sets the initial and maximum size of the heap for the young generation (nursery). |
jvm_maxNewSize | integer | megabytes | You should select your own default value. | You should select your own domain. | yes | Specifies the upper bound for the young generation size. |
jvm_survivorRatio | integer |
|
| yes | The ratio between the Eden and each Survivor-space within the JVM. For example, a jvm_survivorRatio would mean that the Eden-space is 6 times one Survivor-space. |
jvm_useAdaptiveSizePolicy | categorical |
|
| yes | Enable adaptive generation sizing. Disable coupled with jvm_targetSurvivorRatio. |
jvm_adaptiveSizePolicyWeight | integer | percent |
|
| yes | The weighting given to the current Garbage Collection time versus previous GC times when checking the timing goal. |
jvm_targetSurvivorRatio | integer |
|
| yes | The desired percentage of Survivor-space used after young garbage collection. |
jvm_minHeapFreeRatio | integer | percent |
|
| yes | The minimum percentage of heap free after garbage collection to avoid shrinking. |
jvm_maxHeapFreeRatio | integer | percent |
|
| yes | The maximum percentage of heap free after garbage collection to avoid shrinking. |
jvm_maxTenuringThreshold | integer |
|
| yes | The maximum value for the tenuring threshold. |
jvm_gcType | categorical |
|
| yes | Type of the garbage collection algorithm. |
jvm_useParallelOldGC | categorical |
|
| yes | Enables Parallel Mark and Compact Garbage Collection in Old/Tenured generations. |
jvm_concurrentGCThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of threads concurrent garbage collection will use. |
jvm_parallelGCThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of threads garbage collection will use for parallel phases. |
jvm_maxGCPauseMillis | integer | milliseconds |
|
| yes | Adaptive size policy maximum GC pause time goal in millisecond. |
jvm_resizePLAB | categorical |
|
| yes | Enables the dynamic resizing of promotion LABs. |
jvm_GCTimeRatio | integer |
|
| yes | The target fraction of time that can be spent in garbage collection before increasing the heap, computet as 1 / (1 + GCTimeRatio). |
jvm_initiatingHeapOccupancyPercent | integer |
|
| yes | Sets the percentage of the heap occupancy at which to start a concurrent GC cycle. |
jvm_youngGenerationSizeIncrement | integer | percent |
|
| yes | The increment size for Young Generation adaptive resizing. |
jvm_tenuredGenerationSizeIncrement | integer | percent |
|
| yes | The increment size for Old/Tenured Generation adaptive resizing. |
jvm_adaptiveSizeDecrementScaleFactor | integer | percent |
|
| yes | Specifies the scale factor for goal-driven generation resizing. |
jvm_CMSTriggerRatio | integer |
|
| yes | The percentage of MinHeapFreeRatio allocated before CMS GC starts |
jvm_CMSInitiatingOccupancyFraction | integer |
|
| yes | Configure oldgen occupancy fraction threshold for CMS GC. Negative values default to CMSTriggerRatio. |
jvm_CMSClassUnloadingEnabled | categorical |
|
| yes | Enables class unloading when using CMS. |
jvm_useCMSInitiatingOccupancyOnly | categorical |
|
| yes | Use of the occupancy value as the only criterion for initiating the CMS collector. |
jvm_G1HeapRegionSize | integer | megabytes |
|
| yes | Sets the size of the regions for G1. |
jvm_G1ReservePercent | integer |
|
| yes | Sets the percentage of the heap that is reserved as a false ceiling to reduce the possibility of promotion failure for the G1 collector. |
jvm_G1NewSizePercent | integer |
|
| yes | Sets the percentage of the heap to use as the minimum for the young generation size. |
jvm_G1MaxNewSizePercent | integer |
|
| yes | Sets the percentage of the heap size to use as the maximum for young generation size. |
jvm_G1MixedGCLiveThresholdPercent | integer |
|
| yes | Sets the occupancy threshold for an old region to be included in a mixed garbage collection cycle. |
jvm_G1HeapWastePercent | integer |
|
| yes | The maximum percentage of the reclaimable heap before starting mixed GC. |
jvm_G1MixedGCCountTarget | integer | collections |
|
| yes | Sets the target number of mixed garbage collections after a marking cycle to collect old regions with at most G1MixedGCLIveThresholdPercent live data. The default is 8 mixed garbage collections. |
jvm_G1OldCSetRegionThresholdPercent | integer |
|
| yes | The upper limit on the number of old regions to be collected during mixed GC. |
jvm_reservedCodeCacheSize | integer | megabytes |
|
| yes | The maximum size of the compiled code cache pool. |
jvm_tieredCompilation | categorical |
|
| yes | The type of the garbage collection algorithm. |
jvm_tieredCompilationStopAtLevel | integer |
|
| yes | Overrides the number of detected CPUs that the VM will use to calculate the size of thread pools. |
jvm_compilationThreads | integer | threads | You should select your own default value. | You should select your own domain. | yes | The number of compilation threads. |
jvm_backgroundCompilation | categorical |
|
| yes | Allow async interpreted execution of a method while it is being compiled. |
jvm_inline | categorical |
|
| yes | Enable inlining. |
jvm_maxInlineSize | integer | bytes |
|
| yes | The bytecode size limit (in bytes) of the inlined methods. |
jvm_inlineSmallCode | integer | bytes |
|
| yes | The maximum compiled code size limit (in bytes) of the inlined methods. |
jvm_aggressiveOpts | categorical |
|
| yes | Turn on point performance compiler optimizations. |
jvm_usePerfData | categorical |
|
| yes | Enable monitoring of performance data. |
jvm_useNUMA | categorical |
|
| yes | Enable NUMA. |
jvm_useBiasedLocking | categorical |
|
| yes | Manage the use of biased locking. |
jvm_activeProcessorCount | integer | CPUs |
|
| yes | Overrides the number of detected CPUs that the VM will use to calculate the size of thread pools. |
Parameter | Default value | Domain |
jvm_minHeapSize | Depends on the instance available memory |
jvm_maxHeapSize | Depends on the instance available memory |
jvm_newSize | Depends on the configured heap |
jvm_maxNewSize | Depends on the configured heap |
jvm_concurrentGCThreads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm_parallelGCThreads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm_compilation_threads | Depends on the available CPU cores | Depends on the available CPU cores |
jvm.jvm_minHeapSize <= jvm.jvm_maxHeapSize |
jvm.jvm_minHeapFreeRatio <= jvm.jvm_maxHeapFreeRatio |
jvm.jvm_maxNewSize < jvm.jvm_maxHeapSize |
jvm.jvm_concurrentGCThreads <= jvm.jvm_parallelGCThreads |