当前位置 : 主页 > 网络安全 > 测试自动化 >

033、案例实战:百万级用户的在线教育平台,如何基于G1垃圾回收器优化性能(

来源:互联网 收集:自由互联 发布时间:2021-06-22
本文是个人内容总结,详细内容扫描二维码 1、前文回顾 务必要能够合理的分析自己系统的内存压力,然后合理的优化JVM的参数,尽可能降低JVM GC的频率,同时降低JVM GC导致的系统停顿
本文是个人内容总结,详细内容扫描二维码 1、前文回顾 务必要能够合理的分析自己系统的内存压力,然后合理的优化JVM的参数,尽可能降低JVM GC的频率,同时降低JVM GC导致的系统停顿的时间 2、G1垃圾回收器的默认内存布局 4核8G,TPS 600,内存3MB/秒,4G给堆内存,4096M/2048=每个Region2M -Xms4096M -Xmx4096M  -Xss1M  -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseG1GC -XX:G1NewSizePercent=5 -XX:G1MaxNewSizePercent=60 3、GC停顿时间如何设置? -XX:MaxGCPauseMills 默认是200ms,先使用默认值 4、到底多长时间会触发新生代GC? 什么时候Eden区域会内存不够呢?是要到堆内存的60%才会进行新生代GC?G1不是这么玩的。 1、预估:预估新生代中内存回收需要的时间 2、对比:对比现有对象的回收时间和-XX:MaxGCPauseMills设置的停顿时间,保证在设定时间内回收最多内存。    总结:新生代回收的原则是“让充分利用设置的停顿时间来回收最多的内存”,而不是到了默认的5%就触发回收 G1到底会分配多少个Region给新生代,多久触发一次新生代gc,每次耗费多长时间,这些都是不确定的,必须通过一些工具去查看系统实际情况才知道,这个提前是无法预知的 5、新生代gc如何优化? 1、给整个JVM的堆区域足够的内存 2、合理设置“-XX:MaxGCPauseMills”参数   参数到底如何设置,需要结合后续给大家讲解的系统压测工具、gc日志、内存分析工具结合起来进行考虑,尽量让系统的gc频率别太高   ??我的理解对么:使用系统的用户其实并不关心什么gc频率,但他们关心的是我使用的系统卡不卡,处理速度快不快。系统卡不卡是受-XX:MaxGCPauseMills直接影响的。系统处理速度快不快是受gc的频率影响的。“gc的频率高”翻译一下应该是“系统的吞吐量低”,gc频率高说明cpu用来处理垃圾回收的时间比例变多了,自然用来处理业务的cpu时间变少了。比如原先每秒可以取出1w条数据,现在只能取出2k条。 答:理解正确 6、mixed gc如何优化? 触发MixedGC条件 :老年代占比 > 45% 对象进入老年代条件:     1、MinorGC后S区放不下       2、年龄大       3、动态年龄判断 ,  1、3两个尤其可能让更多对象快速进入老年代 其实核心的点,还是“-XX:MaxGCPauseMills”这个参数,保证他的新生代gc别太频繁的同时,还得考虑每次gc过后的存活对象有多少,避免存活对象太多快速进入老年代,频繁触发mixed gc 7、本文总结 根据估算的内存模型,分配内存,使用默认的停顿时间。 新生代回收的原则是“让充分利用设置的停顿时间来回收最多的内存”,而不是到了默认的5%就触发回收 新生代优化:1、足够堆内存 2、合理的-XX:MaxGCPauseMills MixedGC优化:合理的-XX:MaxGCPauseMills
网友评论