对JVM内存的系统级的调优主要的目的是减少gc的频率和Full gc的次数。
1.Full gc
会对整个堆进行整理,包括Young、Tenured和Perm。Full gc因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full gc的次数。
2.导致Full gc的原因
1)年老代(Tenured)被写满
调优时尽量让对象在新生代gc时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 。
2)持久代Pemanet Generation空间不足
增大Perm Gen空间,避免太多静态对象 , 控制好新生代和旧生代的比例
3)System.gc被显示调用
垃圾回收不要手动触发,尽量依靠JVM自身的机制
在对JVM调优的过程中,很大一部分工作就是对于Fullgc的调节,下面详细介绍对应JVM调优的方法和步骤。
1.监控gc的状态
使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和gc执行时间,觉得是否进行优化。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
举一个例子: 系统崩溃前的一些现象:
-
每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,Fullgc的时间也有之前的0.5s延长到4、5s
-
Fullgc的次数越来越多,最频繁时隔不到1分钟就进行一次Fullgc
-
年老代的内存越来越大并且每次Fullgc后年老代没有内存被释放
之后系统会无法响应新的请求,逐渐到达OutOfMemoryError的临界值

本文深入探讨了JVM性能调优,重点在于减少Full GC的频率,分析了导致Full GC的原因,如年老代被写满、持久代空间不足和手动触发GC。通过监控GC状态、生成堆的dump文件、分析结果来判断是否需要优化,并给出了调整GC类型和内存分配的建议。文章强调了正确设置JVM参数的重要性,提供了关键参数配置的参考,并分享了CMS参数优化步骤流程。
最低0.47元/天 解锁文章
555

被折叠的 条评论
为什么被折叠?



