优化年轻代参数的分析思路

分析这几点

• qps多少?
• 每秒占用多少内存?
• 多长时间触发一次Minor GC? 60秒
• 一般Minor GC后有多少存活对象? 120M左右
• Survivor能放的下吗? survivor 500M
• 会不会频繁因为Survivor放不下导致对象进入老年代? 不会
• 会不会因动态年龄判断规则进入老年代?不会, survivor 远大于minor gc后的存活对象总大小

以上是参考一个线上服务gc日志 stw超过500ms 的gc日志来分析的

思路

主要要保证年轻代 survivor 区不会因为塞不下存活对象或因为动态年龄判断进入老年代;同时根据minor gc的频率, 合理调降低大龄对象进入老年代的年龄(具体调大还是调小,要看实际情况),让那些长期存活的对象尽快进入老年代,释放年轻代空间

@Service @Component 这类长期存活但是比较小的 调小年龄可以让他们快点进入老年代待着

但是,如果高并发服务中有部分耗时接口 导致该接口处理过程中的对象 熬了几个minor gc,这时候调低晋升年龄 就可能导致频繁full gc了

posted @ 2021-03-18 01:17  mushishi  阅读(181)  评论(0编辑  收藏  举报