JVM常用配置实践

一、JVM常用基础配置

Ø - Xmn : 新生代内存上限值
Ø - Xms : 整个堆区初始内存分配的 大小
Ø - Xmx : 整个堆区内存分配的最大上限,推荐 - Xms - Xmx 设置等同大小,避免动态回收消耗 资源
Ø - XX:MetaspaceSize (JDK1.8 支持 ) ,对应 JDK1.8 以下的 - XX:PermSize = ,标识最小元空间 ( 永久代 / 方法区 ) 大小
Ø - XX:MaxMetaspaceSize (JDK1.8 支持 ) ,对应 JDK1.8 以下 - XX:MaxPermSize ,标识最大元 空间 ( 永久代 / 方法区 ) 大小
Ø -XX:+ HeapDumpOnOutOfMemoryError 当出现 OOM 时,打印堆转储 dump 文件
Ø - XX:HeapDumpPath = 指定堆转储 dump 文件存储 路径
Ø - Dfile.encoding =UTF-8 设置 系统文件编码格式 UTF-8
Ø -XX:+ PrintGCDetails 输出出 GC 回收详细日志
Ø -XX:+ PrintGCDateStamps 输出 GC 回收详细时间,记录为系统时间戳
Ø - Xloggc :/ export/Logs/ jvm /gc.log  记录 GC 回收日志的文件路径
Ø -XX:+ PrintGCCause (JDK1.8 支持 ) 打印出 GC 回收的原因
Ø -XX:+ DisableExplicitGC : 手动配置禁止使用外部调用 System.gc 来进行触发垃圾回收
 

二、JVM常用优化配置

Ø -XX:+ UseParNewGC 手动指定新生代 使用多线程收集
Ø -XX:+ UseConcMarkSweepGC : 手动指定老年代使用 CMS 收集
Ø -XX:+ UseCMSInitiatingOccupancyOnly 不加这个选项的话,根据成本计算决定是否需要执行 CMS gc ,加上这个选项,当旧生代空间使用率达到 92% 时会无条件执行 Full GC
Ø -XX:+ CMSClassUnloadingEnabled : 手动指定 CMS 收集器对非堆区域永久代进行回收,默认永久代不回收
Ø - XX:CMSInitiatingOccupancyFraction =80 : 手动指定当老年代已用空间达到 80% 时,触发老年代回收 ( 默认 92 %)
Ø - XX:CMSInitiatingPermOccupancyFraction =80  : 手动指定当永久代已用空间达到 80% 时,触发永久代回收 ( 默认 92%)
Ø - Xnoclassgc   : 关闭 CLASS 的垃圾回收功能,默认 20 分钟这个 class 未被使用,虚拟机会卸载这个类。再次使用时重新 加载
Ø -XX:+ UseCMSCompactAtFullCollection : 在进行 Full GC 时对内存进行压缩, JDK1.6 以前不需要配置,默认 开启
Ø - XX:CMSFullGCsBeforeCompaction =2 : -XX:+ UseCMSCompactAtFullCollection 关联使用标识着每经过多少次 Full GC 触发对内存进行一次压缩,默认是 0
 
 

三、JVM配置调优-常见案例

在进行M配置调优时,是个持续优化的过程,并没有银弹。需要长时间不定时关注Xc+ PrintGcDetails
Xc+ PrintGcDateStamps配置产生的日志信息,并结合UMP、MDC监控平台数据,对系统中M配置进行优化调优

1、Yong GO执行耗时长,调优配置

将默认并行GC升级为并发GC
>-XX:+ UseParNewGC:手动指定新生代使用多线程收集器
调新生代Eden、s0、s1各分区比例
>-XX: SurvivorRatio=6:Eden区与 Survivor0、 Survivor1区的大小比值,建议设置为6,默认为8,Eden:S0S1=611
调整新生代中回收存活年龄
>-XX: Max Threshold=5:手动设置对象在新生代中存活年龄(存活次数),默认15次

2、Yong Gc执行频紫,调优配置

调整新生代、堆区域、元空问大小
>-Xmn:新生代内存上限值
>-Xms:整个堆区初始内存分配的大小
>-Xmx:整个堆区内存分配的最大上限,推荐ms和Xmx设置等同大小,避免动态回收消耗资源
>-XX: Metaspace Size=(DK18支持),对应DK18以下的 XX: PermSize=,标识最小元空间(永久代/方法区)大小
>-XX: MaxMetaspace Size(DK.8支持),对应DK18以下的 XX: MaxPermSize,标识最大元空间(永久代/方法区)大小

3、Full GC执行耗时长,调优配置

将默认并行Gc升级为发GC
>-XX:+ Use ConcMarkSweepGC:手动指定老年代使用CMS并发收集器
注:由于G1收集器未在实战中使用,暂不做介绍
开启 fullA压缩,并减少 Full go压缩次数有利有弊
>-XX:+ UseCMSCompactAtFullCollection:在进行Fu山GC时对内存进行压缩,开启 full GC压缩
>-XX: CMSFullGCsBeforeCompaction=2:与X+ se CMscompactAt FullCollection关联使用标识着每经过多少
次FuGC触发对内存进行一次压缩,默认是0次

4、无 Full GO内存持续增长,TP99增高

开启当老年代使用一定量后,强制触发Fu|Gc回收
>-XX:+ UseCMSinitiatingoccupancyon:不加这个选项的话,根据成本计算决定是否需要执行 CMs gC,加上这个
选项,当旧生代空间使用率达到92%时会无条件执行Fu|GC
>-XX:CMSInitiating Occupancy Fraction=80:手动指定当老年代已用空间达到80%时,触发老年代回收默认92%)
开启F叫GC对永久代回收(有利有弊)
>-XX:+ CMSClassUnloading Enabled:手动指定CMS收集器对非堆区域永久代进行回收,默认永久代不回收
>-XX: CMSInitiatingoccupancy Fraction=80:手动指定当永久代已用空间达到80%时,触发永久代回收(默认92%)

 
发布了49 篇原创文章 · 获赞 46 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/weixin_42343424/article/details/103983574