G1调优建议
所属分类 jvm
浏览量 1050
选用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 例子