1.写在前面
分析:
- 堆内存与元空间优化
- 堆内存内部优化:新生代和老年代比例
- 线程堆栈优化
那就废话不多说了,直接上正菜吧:
2.堆内存与元空间优化
2.1 监控分析
JVM内存占用情况:
MetaSpace空间浪费严重,有 3 次Full GC
复制代码
GC统计:
2.2 判断
GC主要原因扩容,扩容时间为1.65秒大于 1 秒,故需要进行调优。
2.3 确定目标
则其他堆空间的分配,基于以下规则来进行。
老年代的空间大小为106MB
- 堆内存:参数-Xms和-Xmx,建议扩大至3-4倍FullGC后的老年代空间占用。106 * (3-4) = (318-424)MB ,设置heap大小为424MB;经过线上一段时间,GC日志中老年代空间占用
- 元空间:参数-XX:MetaspaceSize=N,设置元空间大小为128MB;
- 新生代:参数-Xmn,建议扩大至1-1.5倍FullGC之后的老年代空间占用。106M*(1-1.5)=(209-159)M,设置新生代大小为159MB;不设置:新生代和老年代比例:1 : 2
# 调整参数,基于当前系统运行情况这是最佳配置
JAVA_OPT="${JAVA_OPT} -Xms424m -Xmx424m -Xmn159m -XX:MetaspaceSize=128m"
# -Xms堆最小内存
# -Xmx堆最大内存
# -Xmn新生代大小:
# -XX:MetaspaceSize元空间大小
复制代码
JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:E:/logs/gc-best-heap-
metaspace.log"
复制代码
idea中测试: