Linux下Tomcat内存溢出定位与解决
一、快速判断错误类型
tail -f **$CATALINA_HOME/logs/catalina.out**,根据异常关键字定位类型。常见三类:
二、对应场景与解决方案
堆内存不足(Java heap space)
元空间不足(Metaspace / PermGen)
无法创建新线程(unable to create new native thread)
ulimit -u(用户进程数)、ulimit -n(文件句柄数)、ulimit -s(栈大小)。系统层 OOM 导致进程被杀(非 JVM 异常)
dmesg 可见 oom-killer 记录,且 free 显示 Swap: 0。三、Linux 下 Tomcat 配置与生效步骤
cygwin=false 之前)加入 JAVA_OPTS,例如:
JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn512m \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-Xss512k -verbose:gc -Xloggc:gc.log"
JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn512m \
-XX:PermSize=256m -XX:MaxPermSize=512m \
-Xss512k -verbose:gc -Xloggc:gc.log"
四、验证与长期优化建议
ps -ef | grep java 中确认参数已传入;用 jstat -gc <pid>、jmap -heap <pid> 观察堆与元空间使用。