zoukankan      html  css  js  c++  java
  • G1 GC总结

    # G1 GC总结
    # 在某些情况下,G1触发了Full GC,这时G1会退化使用Serial收集器来完成垃圾的清理工作,它仅仅使用单线程来完成GC工作,GC暂停时间将达到秒级别的.整个应用处于假死状态,不能处理任何请求
    # 一.Full GC的情况: 
    # 	1.并发模式失败: G1启动标记周期,但在Mix GC之前,老年代就被填满,这时候G1会放弃标记周期.
    #     	解决方法: 
    #	    	a.增加堆大小
    #       	b.调整周期(例如增加线程数-XX:ConcGCThreads等)
    # 	2.晋升失败或者疏散失败: G1在进行GC的时候没有足够的内存供存活对象或晋升对象使用,由此触发了Full GC.可以在日志中看到(to-space exhausted)或者(to-space overflow)
    #     	解决方法: 
    #	    a.增加 -XX:G1ReservePercent 选项的值(并相应增加总的堆大小),为“目标空间”增加预留内存量.
    #       b.减少 -XX:InitiatingHeapOccupancyPercent 提前启动标记周期.
    #       c.增加 -XX:ConcGCThreads 选项的值来增加并行标记线程的数目.
    # 	3.巨型对象分配失败:当巨型对象找不到合适的空间进行分配时,就会启动Full GC,来释放空间.
    #     	解决方法: 
    # 			a.增加内存
    #			b.增大-XX:G1HeapRegionSize,使巨型对象不再是巨型对象.
    # 二.避免使用以下参数:
    # 	避免使用 -Xmn 选项或 -XX:NewRatio 等其他相关选项显式设置年轻代大小.固定年轻代的大小会覆盖暂停时间目标.
    # 三.使用场景:
    # 	G1收集器首要关注的是为用户运行着需要大堆空间、限制的垃圾回收延迟的应用提供一个解决方案.这意味着堆大小为6GB左右或者更大,稳定的、可预言的暂停时间小于0.5秒.
    #   如果应用有以下一个或多个特点,当下运行着CMS或ParallelOldGC垃圾收集器的应用把收集器切换到G1收集器的话,非常适合:
    # 		1.Full GC持续时间太长或者太频繁
    # 		2.对象分配比率或者提升有显著的变化
    # 		3.不期望的长时间垃圾收集或者压缩暂停(大于0.5到1秒)
    
    # 使用G1 GC
    wrapper.java.additional.8=-XX:+UseG1GC
    
    # 解锁实验性虚拟机标志
    wrapper.java.additional.9=-XX:+UnlockExperimentalVMOptions
    
    wrapper.java.additional.10=-XX:+UnlockDiagnosticVMOptions
    
    # 设置的 G1 区域的大小.值是 2 的幂,范围是 1 MB 到 32 MB 之间.目标是根据最小的 Java 堆大小划分出约 2048 个区域.
    wrapper.java.additional.11=-XX:G1HeapRegionSize=8
    
    # 为所需的最长暂停时间#设置目标值.默认值是 200 毫秒.如果MaxGCPauseMillis设置的过小,GC就会频繁,吞吐量就会下降.如果MaxGCPauseMillis设置的过大,应用程序暂停时间就会变长.G1的默认暂停时间是200毫秒.
    wrapper.java.additional.12=-XX:MaxGCPauseMillis=200
    
    # 设置要用作年轻代大小最小值的堆百分比.默认值是 Java 堆的 5%.这是一个实验性的标志.有关示例,请参见“如何解锁实验性虚拟机标志”.此#设置取代了 -XX:DefaultMinNewGenPercent 设置.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.13=-XX:G1NewSizePercent=5
    
    # 设置要用作年轻代大小最大值的堆大小百分比.默认值是 Java 堆的 60%.这是一个实验性的标志.此设置取代了 -XX:DefaultMaxNewGenPercent 设置.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.14=-XX:G1MaxNewSizePercent=60
    
    # 设置 STW 工作线程数的值.将 n 的值#设置为逻辑处理器的数量.n 的值与逻辑处理器的数量相同,最多为 8.
    # 如果逻辑处理器不止八个,则将 n 的值#设置为逻辑处理器数的 5/8 左右.这适用于大多数情况,除非是较大的 SPARC 系统,其中 n 的值可以是逻辑处理器数的 5/16 左右.
    wrapper.java.additional.15=-XX:ParallelGCThreads=10
    
    # 设置并行标记的线程数.将 n #设置为并行垃圾回收线程数 (ParallelGCThreads) 的 1/4 左右.
    wrapper.java.additional.16=-XX:ConcGCThreads=8
    
    # 设置触发标记周期的 Java 堆占用率阈值.默认占用率是整个 Java 堆的 45%.
    wrapper.java.additional.17=-XX:InitiatingHeapOccupancyPercent=45
    
    # 为混合垃圾回收周期中要包括的旧区域设置占用率阈值.默认占用率为 65%.这是一个实验性的标志.此设置取代了 -XX:G1OldCSetRegionLiveThresholdPercent 设置.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.18=-XX:G1MixedGCLiveThresholdPercent=65
    
    # 设置您愿意浪费的堆百分比.如果可回收百分比小于堆废物百分比,Java HotSpot VM 不会启动混合垃圾回收周期.默认值是 10%.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.19=-XX:G1HeapWastePercent=10
    
    # 设置标记周期完成后,对存活数据上限为 G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数.默认值是 8 次混合垃圾回收.混合回收的目标是要控制在此目标次数以内.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.20=-XX:G1MixedGCCountTarget=8
    
    # 设置混合垃圾回收期间要回收的最大旧区域数.默认值是 Java 堆的 10%.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.21=-XX:G1OldCSetRegionThresholdPercent=10
    
    # 设置作为空闲空间的预留内存百分比,以降低目标空间溢出的风险.默认值是 10%.增加或减少百分比时,请确保对总的 Java 堆调整相同的量.Java HotSpot VM build 23 中没有此设置.
    wrapper.java.additional.22=-XX:G1ReservePercent=10
    
    # 手动开启Java String对象的分割工作,这个是JDK8u20之后新增的参数,主要用于相同String避免重复申请内存,节约Region的使用;
    wrapper.java.additional.23=-XX:+UseStringDeduplication
    
    # 关闭GC时间过长系统自动检测OOM(OutOfMemory)提示GC overhead limit exceeded,目的是显示内存溢出异常,方便Wrapper Service检测到并重启
    wrapper.java.additional.24=-XX:-UseGCOverheadLimit
    
    #设置垃圾最大存活阀值.如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代.对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论.默认值:15
    wrapper.java.additional.25=-XX:MaxTenuringThreshold=3
    
    # 取消 内存整理,G1GC 天生优势 
    wrapper.java.additional.26=-XX:-ResizePLAB
    
    wrapper.java.additional.27=-XX:+PrintAdaptiveSizePolicy
    wrapper.java.additional.28=-XX:+ParallelRefProcEnabled
    wrapper.java.additional.29=-XX:+G1SummarizeConcMark
    
    # 开启GC日志
    wrapper.java.additional.30=-verbose:gc 
    wrapper.java.additional.31=-XX:+PrintGCDetails 
    wrapper.java.additional.32=-XX:+PrintGCDateStamps 
    wrapper.java.additional.33=-XX:+PrintGCApplicationStoppedTime # 打印应用停留时间 
    wrapper.java.additional.34=-XX:+PrintTenuringDistribution # 老年代分布 
    wrapper.java.additional.35=-Xloggc:../logs/gc.log 
    wrapper.java.additional.36=-XX:+UseGCLogFileRotation 
    wrapper.java.additional.37=-XX:NumberOfGCLogFiles=10 
    wrapper.java.additional.38=-XX:GCLogFileSize=128M
    
  • 相关阅读:
    Robot Framework (二)---测试数据
    Robot Framework(一)---Robot Framework 简介
    软件测试---产品需求文档测试
    浅谈Python 中的闭包
    浅析 Python中__init__.py
    PEP8---Python命名规则
    软件产品测试经验(一)---产品专项测试
    Microsoft Office Excel 不能访问文件。。。 可能的原因有。。。
    记HttpListener调用exe程序界面无法打开
    简单搞懂逆变与协变
  • 原文地址:https://www.cnblogs.com/wgslucky/p/11764769.html
Copyright © 2011-2022 走看看