8

JVM调优原则

 3 years ago
source link: https://blog.shareworld.vip/archives/jvm2tuning
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JVM调优原则

Owen Jia 2020年09月10日 80次浏览

JVM调优原则

  1. 将进入老年代的对象数量降到最低
  2. 减少 Full GC 的执行时间

在同样场景下,采用多个机器上进行参数调整后的比较验证,将验证能够提高性能的参数应用到最终所有服务器上。

满足下列不需要优化

Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次;

针对JVM堆的设置

一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值;

年轻代和年老代

根据默认的比例(1:2)分配堆内存, 可以通过调整二者之间的比率NewRadio来调整二者之间的大小。

如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小。

年轻代和年老代设置多大才参考:

  1. 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间,小的年老代会导致更频繁的Full GC。

  2. 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短,大的年老代会减少Full GC的频率。

如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性。

在抉择时应该根据以下两点:

  1. 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理 。

  2. 通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间。

配置较好的机器

比如多核、大内存机器,可以为年老代选择并行收集算法: -XX:+UseParallelOldGC 。

线程堆栈的设置

每个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太了,一般256K就足用。

理论上,在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK