在 CentOS 上运行 Java 应用时出现日志中提示内存溢出(OutOfMemoryError),常见原因可以分为以下几类。下面按发生频率和实际排查角度说明。
日志表现:
java.lang.OutOfMemoryError: Java heap space
原因:
-Xmx 太小)排查方向:
# 查看 JVM 参数
ps -ef | grep java
# 查看堆使用情况
jstat -gcutil <pid> 1000
日志表现:
java.lang.OutOfMemoryError: Metaspace
(JDK 8+ 一般是 Metaspace)
原因:
解决:
-XX:MaxMetaspaceSize=256m
日志表现:
java.lang.OutOfMemoryError: unable to create new native thread
原因:
ulimit -u)-Xss)CentOS 特有关注:
ulimit -u
cat /etc/security/limits.conf
日志表现:
java.lang.OutOfMemoryError: Direct buffer memory
原因:
-XX:MaxDirectMemorySize日志表现:
java.lang.OutOfMemoryError: GC overhead limit exceeded
原因:
free -m
top
ulimit -n
ulimit -u
swapon -s
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/heapdump.hprof
jmapjstack-Xms / -Xmx 是否合理ulimit 是否过小如果你愿意,可以把具体的 OOM 日志内容或Java 启动参数贴出来,我可以帮你精准判断是哪一种原因,以及给出具体调优方案。