调优实践|堆内存与元空间优化:新生代和老年代比例优化

本文探讨了Java应用的JVM内存优化,重点关注堆内存与元空间、新生代与老年代的比例调整。通过监控分析,确定了优化目标,如老年代空间大小、堆内存大小和元空间大小。实验对比了不同新生代和老年代比例(1:8和3:1)对性能的影响,最终建议保持默认的1:2比例。同时,文章还涉及了线程堆栈优化,提出-Xss参数设置对线程数和性能的影响,推荐设置为512k。
摘要由CSDN通过智能技术生成

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中测试:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值