Java 应用运行在 Tomcat 上发生内存溢出(OutOfMemoryError),通常不是 Tomcat 本身的问题,而是 JVM 内存配置、应用代码或资源使用方式 导致的。下面按常见原因 → 原理 → 解决思路来说明。
错误信息:
java.lang.OutOfMemoryError: Java heap space
原因:
典型场景:
List<User> list = userDao.findAll();(数据量巨大)static Map 只加不删解决:
# 增大堆内存
-Xms512m -Xmx2048m
并配合:
错误信息:
java.lang.OutOfMemoryError: PermGen space # JDK7及以前
java.lang.OutOfMemoryError: Metaspace # JDK8+
原因:
典型场景:
解决:
# JDK8+
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
避免频繁 redeploy。
错误信息:
java.lang.OutOfMemoryError: unable to create new native thread
原因:
典型场景:
解决:
-Xss256k
并限制线程池大小。
错误信息:
java.lang.OutOfMemoryError: Direct buffer memory
原因:
解决:
-XX:MaxDirectMemorySize=256m
Tomcat 默认堆可能只有 128~256MB。
解决: 修改:
bin/catalina.sh / catalina.bat
JAVA_OPTS="-Xms1024m -Xmx2048m"
Tomcat 对类加载器不保证完全回收。
建议:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof
Tomcat 内存溢出,99% 是“JVM 内存不够 + 应用代码有内存泄漏或使用不当”。
如果你愿意,可以告诉我:
我可以帮你精准定位是哪一类问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。