Linux环境下Tomcat内存溢出可按以下步骤解决:
调整JVM内存参数
修改catalina.sh(或setenv.sh),增加堆内存大小(-Xms和-Xmx),建议设为物理内存的70%-80%,且-Xms和-Xmx保持一致以避免动态调整开销。
-XX:PermSize和-XX:MaxPermSize(元空间),Java 8+使用-XX:MaxMetaspaceSize。export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m"。优化垃圾回收策略
选择合适的GC算法,如G1(适合大内存应用),可通过-XX:+UseG1GC参数启用,并调整相关参数(如-XX:MaxGCPauseMillis)。
排查内存泄漏
-XX:+HeapDumpOnOutOfMemoryError参数在内存溢出时自动生成堆转储文件,使用VisualVM或Eclipse MAT分析泄漏对象。调整线程池配置
修改conf/server.xml中Connector的maxThreads参数,根据负载调整线程数,避免线程过多导致内存耗尽。
系统层面优化
/etc/security/limits.conf,提升tomcat用户的nofile限制。其他措施
关键工具:jmap(生成堆转储)、jvisualvm/MAT(分析内存)、top/jstat(监控资源使用)。
参考来源: