解决Ubuntu Tomcat内存溢出可按以下步骤操作:
查看日志定位问题
检查/var/log/tomcatX/catalina.out(X为版本号)或logs/目录下的日志,搜索OutOfMemoryError,判断是堆内存、元空间(MetaSpace)或线程溢出。
调整JVM参数
/etc/default/tomcatX(或setenv.sh),增加-Xms(初始堆)和-Xmx(最大堆),建议设置为物理内存的80%,例如:JAVA_OPTS="-Xms1024m -Xmx2048m"。-XX:MaxMetaspaceSize=512m。-XX:MaxPermSize=512m。-XX:+UseG1GC,优化大内存场景。优化应用代码
try-with-resources或手动释放资源。监控与分析工具
jconsole、VisualVM或Eclipse MAT生成堆转储(Heap Dump),分析内存占用情况。top或htop命令监控Tomcat进程的内存使用,确认调整后是否改善。操作系统层面调整
ulimit -u调整系统最大线程数,或在Tomcat的conf/server.xml中限制maxThreads参数。升级Tomcat版本
旧版本可能存在内存管理缺陷,建议升级到最新稳定版,获取优化后的内存管理机制。
示例操作(以Java 8+为例):
/etc/default/tomcat9:JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
sudo systemctl restart tomcat9
若问题仍未解决,需结合堆转储分析具体泄漏点,或进一步排查第三方库的兼容性问题。