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

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Tomcat 是一个基于 Java 的 Web 服务器,它运行在 JVM 上。因此,对 Tomcat 进行堆内存调优需要同时考虑 JVM 的内存设置和 Tomcat 的 JVM 参数设置。 以下是一些常用的堆内存调优参数,可以在 Tomcat 配置文件中进行设置: 1. -Xms 和 -Xmx 参数 这两个参数分别代表 JVM 堆的最小值和最大值。建议将它们设置为相同的值,以避免 JVM 在运行时动态调整堆大小导致性能下降。 例如,将 Tomcat 的启动脚本中的 -Xms 和 -Xmx 设置为 2GB: ``` JAVA_OPTS="-Xms2g -Xmx2g" ``` 2. -XX:NewSize 和 -XX:MaxNewSize 参数 这两个参数分别代表新生代的最小值和最大值。新生代一般占据 JVM 堆的比例较小,因此可以设置较小的值。 例如,将 Tomcat 的启动脚本中的 -XX:NewSize 和 -XX:MaxNewSize 设置为 256MB: ``` JAVA_OPTS="-XX:NewSize=256m -XX:MaxNewSize=256m" ``` 3. -XX:SurvivorRatio 参数 这个参数用于设置 Eden 区和 Survivor 区的比例。一般来说,Survivor 区的大小应该是 Eden 区的 1/3 到 1/4。 例如,将 Tomcat 的启动脚本中的 -XX:SurvivorRatio 设置为 4: ``` JAVA_OPTS="-XX:SurvivorRatio=4" ``` 4. -XX:MaxTenuringThreshold 参数 这个参数用于设置对象进入年代的年龄阈值。一般建议将它设置为 15。 例如,将 Tomcat 的启动脚本中的 -XX:MaxTenuringThreshold 设置为 15: ``` JAVA_OPTS="-XX:MaxTenuringThreshold=15" ``` 5. -XX:+UseConcMarkSweepGC 和 -XX:+UseParNewGC 参数 这两个参数分别代表使用 CMS 垃圾回收器和使用 ParNew 垃圾回收器。CMS 垃圾回收器适用于多核 CPU,能够在不中断应用程序的情况下进行垃圾回收;ParNew 垃圾回收器适用于单核 CPU,能够加速新生代的垃圾回收。 例如,将 Tomcat 的启动脚本中的 -XX:+UseConcMarkSweepGC 和 -XX:+UseParNewGC 设置为 true: ``` JAVA_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC" ``` 以上是一些常用的堆内存调优参数,可以根据实际情况进行调整。同时,建议使用 JVM 监控工具如 JConsole 和 VisualVM 来监控 JVM 的内存使用情况,及时调整参数以达到最优化的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值