Tuesday, 30 December 2025

Production Tomcat (Java 8) parameter


✔ JVM tuning (temporary mitigation)

-Xms8g -Xmx8g -XX:+UseG1GC

⚠️ JVM tuning does not fix leaks, only delays failure.


๐Ÿงช Validation

jcmd <PID> GC.run

Check memory release:

jmap -histo <PID>

✅ Best Practices (Production / Bank / ISO)

✔ Code review for static leaks
✔ Mandatory resource closing
✔ Regular heap dump analysis
✔ Scheduled Tomcat restart (only if unavoidable)
✔ Monitoring via Prometheus / JMX


Summary

AreaAction
Root causeApplication code
DetectionHeap dump + GC logs
FixCode cleanup
PreventionMonitoring & best practices

If you want, I can provide:

  • Tomcat memory leak SOP

  • Heap dump analysis checklist

  • Production JVM tuning template

Just let me know.

tomcat memory perameter

Below are the commonly used and recommended Tomcat (JVM) memory parameters, with clear explanations and production-ready examples.


๐Ÿ”น Core Tomcat JVM Memory Parameters

1️⃣ Heap Memory

-Xms4g # Initial heap size -Xmx4g # Maximum heap size

Best practice: Keep -Xms = -Xmx for stable performance.


2️⃣ Metaspace (Java 8+)

-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m

Controls class metadata memory (important for Tomcat apps).


3️⃣ Stack Memory (per thread)

-Xss512k

Too many threads + large stack = OutOfMemoryError.


4️⃣ Garbage Collector (Recommended)

For Java 8+

-XX:+UseG1GC

Optional tuning:

-XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45

๐Ÿ”น Memory Leak & Stability Parameters

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/heapdump -XX:+ExitOnOutOfMemoryError

๐Ÿ”น GC Logging (Java 8)

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/tomcat/logs/gc.log

๐Ÿ”น Example: Production Tomcat (Java 8)

Add to setenv.sh:

export CATALINA_OPTS=" -Xms8g -Xmx8g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xss512k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/heapdump "

๐Ÿ”น Check Memory at Runtime

jmap -heap <PID>
jstat -gc <PID> 5s

✅ Recommended Sizing (Rule of Thumb)

Server RAMTomcat Heap
8 GB4–5 GB
16 GB8–10 GB
32 GB16–20 GB

Leave memory for:

  • OS

  • File cache

  • Other services


⚠️ Common Mistakes

❌ Setting heap larger than system RAM
❌ Ignoring Metaspace
❌ Relying only on JVM tuning for leaks


cat /u01/ocastomcat/tomcat/apache-tomcat-9.0.65/bin/setenv.sh

#java.awt.headles=strue
export CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"
#export CATALINA_OPTS="$CATALINA_OPTS -Xms24576m"
#export CATALINA_OPTS="$CATALINA_OPTS -Xmx24576m"
#export CATALINA_OPTS="$CATALINA_OPTS -Xms8g -Xmx16g"
### ================================
### Memory & Heap Settings
### ================================
export CATALINA_OPTS="$CATALINA_OPTS -Xms32g"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx48g"
# Why? Large application benefits from higher initial heap for stability.

### ================================
### Garbage Collector (G1)
### ================================
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxGCPauseMillis=200"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+ParallelRefProcEnabled"

### ================================
### Heap Region Tuning (for 16–32GB heaps)
### ================================
export CATALINA_OPTS="$CATALINA_OPTS -XX:G1HeapRegionSize=32m"

### ================================
### Metaspace Tuning (large WAR needs more)
### ================================
export CATALINA_OPTS="$CATALINA_OPTS -XX:MetaspaceSize=512m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxMetaspaceSize=2048m"

### ================================
### JVM Startup Optimization
### ================================
export CATALINA_OPTS="$CATALINA_OPTS -XX:+AlwaysPreTouch"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+DisableExplicitGC"


# --------------------------------
# Heap Dump on OutOfMemoryError
# --------------------------------
export CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
export CATALINA_OPTS="$CATALINA_OPTS -XX:HeapDumpPath=/u01/ocastomcat/tomcat/apache-tomcat-9.0.65/heapdump"

# --------------------------------
# GC Logging (Java 8 syntax)
# --------------------------------
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDetails"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintGCDateStamps"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+PrintTenuringDistribution"
export CATALINA_OPTS="$CATALINA_OPTS -Xloggc:/opt/tomcat/logs/gc.log"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseGCLogFileRotation"
export CATALINA_OPTS="$CATALINA_OPTS -XX:NumberOfGCLogFiles=10"
export CATALINA_OPTS="$CATALINA_OPTS -XX:GCLogFileSize=100M"



Example: Production Tomcat (Java 8)

Add to setenv.sh:

export CATALINA_OPTS=" -Xms8g -Xmx8g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xss512k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/heapdump