🗓️ 31082025 1203

JVM OPTIONS

Cheatsheet for JVM flags that matter in production. For what each memory area is, see memory_areas.

Heap Memory​

FlagPurposeRule of ThumbRisk if Wrong
-XmxMax heap sizeRAM ≤16 GB → 50%; RAM >16 GB → 65%Too small → frequent GC; too large → starves OS
-XmxUpper boundAlways ≤75% of RAMOS and NIO buffers starved
-XmsInitial heapSet equal to -XmxDynamic resizing → STW pauses

Direct Memory and Buffers​

FlagPurposeRule of ThumbRisk if Wrong
-XX:MaxDirectMemorySizeOff-heap NIO/Netty cap~15% of -Xmx, min 256 MB, max 25% of -XmxToo high → heap starved; too low → NIO fails
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMEDOpens APIs for monitoring toolsRequired for accurate direct memory metricsSome monitoring tools break

OOM Troubleshooting​

FlagPurposeRule of Thumb
-XX:+HeapDumpOnOutOfMemoryErrorDump heap on OOMAlways enable
-XX:HeapDumpPath=Dump locationPersistent storage: /hostdata/crash/{svc}.oom.hprof
-XX:ErrorFile=JVM fatal error logPersistent storage: /hostdata/crash/{svc}.hs_err_pid%p.log
DANGER

Wrong paths → dumps lost after container restart. Always use persistent volumes.

GC Logging​

FlagPurposeRule of Thumb
-Xlog:gc*GC log outputLogs synced: filecount=1, filesize=200m. Not synced: filecount=5, filesize=200m

Logging and Encoding​

FlagPurposeRule of Thumb
-Dlog4j2.contextSelectorAsync loggingSet to org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
-Dfile.encodingDefault encodingUTF-8

Security and Stability​

FlagPurpose
-Dfastjson.parser.safeMode=trueBlocks Fastjson deserialization RCE
-Djava.awt.headless=trueDisables GUI rendering (saves CPU)
-Dspring.devtools.restart.enabled=falsePrevents hot-reload in production

Profiling​

FlagPurpose
-XX:+UseZingMXBeansExposes JVM metrics
-XX:+ProfileLiveObjectsEnables jmap -histo object histograms
-XX:ProfileLogIn / -XX:ProfileLogOutJIT profile log paths for ReadyNow warmup

Quick Rules​

Heap​

  • Pin size: -Xms = -Xmx
  • RAM ≤16 GB → 50%. RAM >16 GB → 65%.

Direct memory​

  • Default ~15% of -Xmx, always ≥256 MB, ≤25% of -Xmx

Logging​

  • Async logging always. GC logs rotated.

Troubleshooting​

  • Heap dumps + error logs on persistent volumes.

References​