本文主要是介绍JVM和数据库调优方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、JVM调优方案
将新对象预留在新生代
- Full GC的成本远远高于Minor GC,新生代的回收速度高于老年代回收,因此尽可能将对象分配在新生代
- 为应用程序分配一个合理的新生代空间,最大限度避免新对象直接进入老年代
-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn - 防止survivor from区数据直接进入老年代,增大from区或者增大from区利用率
增大from区:-XX:SurvivorRation=8 这是默认值 Eden:from:to=8:1:1 一般不采用这种情况
增大from区利用率:默认是50%,-XX:TargetSurvivorRatio=90,利用率达到90%后回收
大对象进入老年代
- 大对象出现在新生代会扰乱新生代GC,破坏新生代原有对象结构,因为大对象进来后会移动大量小的年轻对象进入老年代
- 避免出现短命的大对象,应该由开发人员规避
- -XX:PretenureSizeThreshold=1000000设置大对象进入老年代的阙值,1MB以上的对象进入老年代
设置对象进入老年代的年龄
- 默认值是15
- -XX:MaxTenuringThreshold来设置年龄,但这个设置的值,不一定是真正的年龄值,因为JVM也会根据运行时内存的使用情况动态计算,动态计算得出的值和设置的值比较拿较小值设为 对象进入老年代的年龄
- 可以调大一些,让对象尽可能的停留在新生代
考虑稳定和震荡的堆大小
- 一般-Xms和-Xmx大小保持一致,这样系统在运行时堆大小是恒定的,稳定的堆空间可以减少GC次数
- 但是稳定的堆空间也有一个坏处,那就是单次GC时间可能会变大,基于此考虑 JVM也提供了两个参数
-XX:MinHeapFreeRatio:堆空间最小空闲比例,默认40,当堆空间空闲内存小于这个数值时,JVM会扩展堆空间
-XX:MaxHeapFreeRatio:堆空间最大空闲比例,默认70,当堆空间空闲内存大于这个数值时,便会压缩堆空间
两个参数只有在-Xmx和-Xms不等时生效
基于吞吐量的考虑
尽可能减少系统执行垃圾回收的总时间,使用并行回收收集器,
假如运行内存4G,32核CPU
- -Xmx3800m和-Xms3800m保持一致,避免堆内存频繁震荡
- -Xss128k,减少线程栈大小,可以使系统内存支持更多线程
- -Xmn2g:设置新生代大小 新生代大一些
- -XX:+UseParallelGC:新生代使用并行回收收集器
- -XX:ParallelGCThreads:垃圾回收的线程数 一般可以和CPU数保持一致,如果CPU数比较大,可以适当小一些
- -XX:+UseParallelOldGC:老年代使用并行回收收集器
基于降低停顿的考虑
首先考虑关注系统停顿的CMS收集器
- -XX:ParallelGCThreads:垃圾回收的线程数
- -XX:+UseParNewGC:新生代使用并行回收收集器,与UseParallelGC的区别在于,它可以与CMS收集同时使用,是UseParallelGC的升级版本,手动开启
- -XX:+UseConcMarkSweepGC:老年代使用CMS收集器降低停顿
- -XX:SurvivorRatio:设置survivor比例
- -XX:TargetSurvivorRatio,设置survivor区的使用率
- XX:MaxTenuringThreshold:摄者年轻对象晋升老年代的年龄 默认15,改为30
跳过class校验认证(提高启动速度)
由于JVM虚拟机在加载类时,出于安全考虑,会对class进行校验和认证,如果类文件是可信任的,为了加快程序的运行速度,可以考虑禁用这些校验
-Xverify:none
控制GC(提高启动速度)
- 禁用显示的GC操作:例如Sysytem.gc()来触发Full GC ,-XX:DisableExplicitGC
- 若涉及不到动态生成类这些操作,可以指定不进行类回收,可以使用-Xnoclassgc启动应用程序
综上所述,JVM调优一般有以下几个过程
- 确定堆内存大小(-Xmx、-Xms)
- 合理分配新生代和老年代(-XX:NewRatio、-Xmn、-XX:SurvivorRatio)
- 确定永久区大小(-XX:Permisize、-XX:MaxPermSize)
- 选择垃圾收集器
- 对垃圾收集器进行合理配置
- 禁用显示GC(-XX:+DisableExplicitGC)
- 禁用类元数据回收(-Xnoclassgc)
- 禁用类验证(-Xverify:none)
这篇关于JVM和数据库调优方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!