在 Ubuntu 上做 Java 内存调优,通常包含 JVM 参数配置、系统资源限制、监控与分析、常见问题处理 几个层面。下面给你一套比较系统、可落地的做法。
Java 内存主要分几块:
-Xms / -Xmx-XX:MetaspaceSize-Xss-XX:MaxDirectMemorySizejava -Xms2g -Xmx2g -jar app.jar
建议:
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-Xss512k
线程多时(几千线程)很关键。
free -h
top
htop
ulimit -a
重点看:
max memory sizevirtual memoryopen files修改示例(临时):
ulimit -v unlimited
ulimit -u 65535
永久修改:
/etc/security/limits.conf
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75.0
-XX:+UseG1GC
或
-XX:+UseZGC
-Xlog:gc*:file=/var/log/gc.log:time,level,tags
旧版:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/gc.log
grep -i "OutOfMemory" /var/log/app.log
jmap -dump:live,format=b,file=heap.hprof <pid>
jstat -gcutil <pid> 1000
jstack <pid>
jmap -heap <pid>
原因:
解决:
原因:
解决:
看:
dmesg | grep -i oom
通常是:
java \
-Xms2g -Xmx2g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-Xss512k \
-XX:+UseG1GC \
-Xlog:gc*:file=/var/log/gc.log:time \
-jar app.jar
如果你愿意,可以告诉我:
我可以直接帮你给一套 针对性参数。