Skip to content

Presto cluster + how to tune the jvm.config according to memory resources

we are using presto cluster as distributed SQL query

our cluster size

1 machine as coordinator machine

12 presto workers machines

each machine is 64G memory size , and on each machine only presto application installed

about the jvm.config on the workers , look like this


and the jvm.config on the presto coordinator , like like this


we set the Xmn and Xmx values as above , but this setting is only estimation

can we get help how to tune the Xmn and Xmx according to MAX memory – 64G so presto cluster performance will tune to the best practice sizing


Usually, there is no reason to set -Xmn (size of young gen), because the JVM will tune this size at run-time. Or, in other words, you have to have good reasons to set -Xmn.

-Xmx — you basically want to tell the JVM it can use all of the memory, but at the same time need to account for non-heap memory in JVM (certain buffers, GC data structures, etc.) and memory occupied by OS-level services. In Presto case, as a rule of thumb you typically set -Xmx to 80% of available memory and tune it later, based on your monitoring of your workloads.

Regarding other properties you set:

  • -XX:+CMSClassUnloadingEnabled is redundant (CMS garbage colelctor is not used, G1 is, as per -XX:+UseG1GC flag)
  • -XX:+AggressiveOpts is unlikely something you want to set
  • -XX:MinHeapFreeRatio, -XX:MaxHeapFreeRatio — if Presto is the only service on the box, you don’t want to set these
  • you’re missing some recommended properties (and we recommend each of them for a reason). See