首页  

G1调优建议     所属分类 jvm 浏览量 38
选用G1的判断依据

50%以上的堆被存活对象占用
对象分配和晋升的速度变化非常大
垃圾回收时间比较长


-XX:+UseG1GC

gc日志分析 GCViewer 

Throughput MinPause MaxPause AvgPause GCcount
99.18% 0.00017s 0.0158s 0.00557s 12

最大停顿时间调整
-XX:MaxGCPauseMillis=200 

启动并发GC时堆内存占用百分比
-XX:InitiatingHeapOccupancyPercent=45
IOCP
并发GC周期触发时机 基于整个堆的使用率

0 表示 一直执行GC循环 ,默认45


官网建议
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#recommendations

(1) 不要手动设置新生代和老年代的大小,只要设置整个堆的大小

G1运行过程,会自己调整新生代和老年代的大小
通过adapt代的大小来调整对象晋升的速度和年龄,从而达到设置的暂停时间目标
手动设置大小意味放弃了G1的自动调优

(2) 不断调优暂停时间目标
一般情况下这个值设置为100ms或者200ms
设置成50ms就可能不太合理 
暂停时间设置太短,会导致GC跟不上垃圾产生的速度,最终退化成Full GC

(3) 使用-XX:ConcGCThreads=n来增加标记线程的数量
IHOP 设置过高,可能会遇到转移失败的风险,对象转移时空间不足。
设置过低,可能会使标记周期运行过于频繁,有可能混合收集期回收不到空间
如果IHOP设置合理,并发周期时间过长时,可以尝试增加并发线程数,调高ConcGCThreads

(4) MixedGC调优

-XX:InitiatingHeapOccupancyPercent
-XX:G1MixedGCLiveThresholdPercent
-XX:G1MixedGCCountTarger
-XX:G1OldCSetRegionThresholdPercent

(5) 适当增加堆内存大小


jvm可视化分析工具 问题排查命令和工具及实战案例 jdk自带工具使用 jvm相关知识点 java8 jvm 参数

上一篇     下一篇
jvm到底能运行多少个线程

aerospike数据删除机制

网络IO模型

检查硬盘是否为SSD

NIO概述

第一个 NIO server 例子