CentOS下定位与解决JSP内存溢出
一、先快速定位错误类型
二、对应场景与解决方案
-Xms2g -Xmx2g -Xmn512m。-verbose:gc -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof。-XX:PermSize=… -XX:MaxPermSize=…。示例:-XX:PermSize=256m -XX:MaxPermSize=512m。-XX:MetaspaceSize=… -XX:MaxMetaspaceSize=…(无上限时注意系统内存)。<%@ page session="false" %>。<session-timeout>0</session-timeout>(或更小值),避免高 QPS 下会话对象快速累积。三、在 CentOS 上正确修改 Tomcat 的 JVM 参数
cygwin=false” 之前添加(或追加到已有的 JAVA_OPTS):
JAVA_OPTS="$JAVA_OPTS -server -Xms2g -Xmx2g -Xmn512m \
-XX:PermSize=256m -XX:MaxPermSize=512m \
-verbose:gc -Xloggc:gc.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof"
JAVA_OPTS="$JAVA_OPTS -server -Xms2g -Xmx2g -Xmn512m \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-verbose:gc -Xloggc:gc.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof"
JAVA_OPTS 行追加上述参数,然后重启服务:sudo systemctl restart tomcat6 # 或 tomcat7
四、验证与容量边界检查
java -Xmx<size> -version 验证最大可用堆大小,避免设置超过 JDK/OS 支持上限导致启动失败。jstat -gc <pid>、jmap -heap <pid> 观察堆/元空间使用;发生 OOM 时检查是否生成了 heapdump 文件并进行分析。五、常见陷阱与优化建议