JVM Options
Configuring the JVM is an important step of a project. Here we discuss the mandatory and preferred JVM options to get the best performance out of Atoti Server.
Mandatory
ActivePivot needs access to some internal modules to function properly, which are now protected in JDK 17, so the following argument is necessary:
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
Additionally, to use Arrow as a source or an export format, the following option is required in JDK 17 by Arrow :
--add-opens java.base/java.nio=ALL-UNNAMED
Memory
Configuring how much memory is allocated to your application is usually necessary. You can control it through these options:
-Xmx<max on-heap memory>
-Xms<min on-heap memory>
-XX:MaxDirectMemorySize=<max off-heap memory>
If you are running ActivePivot on several NUMA nodes but have not configured its NUMA properties, using the JVM NUMA option will result in better performance:
-XX:+UseNUMA
Garbage Collection
A poorly-configured garbage collector can make a significant dent in your application's performance and uptime. We recommend using these options:
-XX:+UseG1GC
-XX:+ExplicitGCInvokesConcurrent
-XX:MetaspaceSize=500m
Logging GC info may help fine-tune performance. You can enable logging with the following option:
-Xlog:gc*=info,safepoint*=warning:file=<path to log file>/gc-$(date +%Y_%m_%d-%H_%M).log