Ubuntu下Tomcat内存溢出定位与处理
一、快速判断与定位
二、立即缓解 调整JVM内存参数
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
$CATALINA_HOME/bin/shutdown.sh && $CATALINA_HOME/bin/startup.sh。三、根因排查与优化
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/heapdumps
发生 OOM 时自动生成 .hprof 文件,使用 Eclipse MAT 等工具分析“支配树/GC Roots”,定位占用最多的对象与引用链。lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head 排查进程打开文件数是否异常。四、实用参数模板与建议
JAVA_OPTS="\
-server \
-Xms2048m -Xmx2048m \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-Xss256k \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/opt/tomcat/heapdumps \
-Djava.awt.headless=true"