在 Ubuntu 上遇到 Java 内存溢出(OutOfMemoryError),可以从「排查原因」和「解决办法」两方面入手。下面给你一个实用指南。
Java 常见 OOM 类型:
查看错误日志示例:
java.lang.OutOfMemoryError: Java heap space
ps -ef | grep java
或
jps -l
jinfo <pid>
free -h
top
htop
启动时加参数:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/heapdump.hprof
用工具分析:
jhat(简单用)加大堆内存:
java -Xms512m -Xmx2g -jar app.jar
Ubuntu 服务器建议:
-Xmx2g-Xmx4g-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
错误:
Unable to create new native thread
解决:
Ubuntu 查看限制:
ulimit -u
修改:
sudo vi /etc/security/limits.conf
* soft nproc 4096
* hard nproc 8192
-XX:MaxDirectMemorySize=512m
java \
-Xms1g \
-Xmx2g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/java/ \
-jar app.jar
你可以补充:
java -version)我可以直接帮你 定位是哪种 OOM,并给出精确参数和代码修改建议。