在 CentOS 上出现 Java 内存溢出(OutOfMemoryError),通常不是 CentOS 本身的问题,而是 JVM、应用代码或系统资源限制 导致的。下面从常见原因到排查思路系统说明。
Java 内存溢出一般表现为:
java.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: Metaspacejava.lang.OutOfMemoryError: unable to create new native threadjava.lang.OutOfMemoryError: GC overhead limit exceededCentOS 默认不会自动给 Java 分配大内存。
java -Xms512m -Xmx512m ...
如果应用并发高或处理大数据,很容易溢出。
✅ 解决:
-Xms2g -Xmx2g
常见情况:
即使内存调大,也会最终 OOM。
✅ 排查:
jmapjstack如果系统总内存不够:
free -h
top
Java 进程会被 OOM Killer 杀掉,或 JVM 无法分配内存。
✅ 解决:
ulimit -a
关注:
max memory sizevirtual memory容器内存限制太小,Java 不知道:
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75
报错:
unable to create new native thread
原因:
ulimit -u✅ 解决:
-Xss256k
ulimit -u 65535
原因:
✅ 解决:
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
常见于:
ByteBuffer✅ 解决:
-XX:MaxDirectMemorySize=512m
grep -i "OutOfMemory" app.log
free -h
top
ps -ef | grep java
jmap -dump:live,format=b,file=heap.hprof <pid>
jstack <pid> > thread.txt
CentOS 只是运行环境,Java 内存溢出 90% 以上是:
如果你愿意,可以告诉我:
我可以帮你 精准定位原因并给出参数配置。