记录一下平时用的JVM的配置

 

先是日志的

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution 
-Xloggc:/tmp/logs/gc_%p.log -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/tmp/logs -XX:ErrorFile=/tmp/logs/hs_error_pid%p.log 
-XX:-OmitStackTraceInFastThrow

 

-verbose:gc

打印 GC 日志

PrintGCDetails

打印详细 GC 日志

PrintGCDateStamps

系统时间,更加可读,PrintGCTimeStamps 是 JVM 启动时间

PrintGCApplicationStoppedTime

打印 STW 时间

PrintTenuringDistribution

打印对象年龄分布,对调优 MaxTenuringThreshold 参数帮助很大

loggc

将以上 GC 内容输出到文件中

HeapDumpOnOutOfMemoryError

OOM 时 Dump 信息,非常有用

HeapDumpPath

Dump 文件保存路径

ErrorFile

错误日志存放路径

 

下面还包括了一些调优时候需要用到的参数

JAVA_OPTS="$JAVA_OPTS -XX:NewRatio=2 -XX:G1HeapRegionSize=8m -XX:MetaspaceSize
=256m -XX:MaxMetaspaceSize=256m -XX:MaxTenuringThreshold=10 -XX:+UseG1GC
 -XX:InitiatingHeapOccupancyPercent=45 -XX:MaxGCPauseMillis=200 -verbose:gc
  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintReferenceGC
   -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=6
    -XX:GCLogFileSize=32m -Xloggc:./var/run/gc.log.$(date +%Y%m%d%H%M)
     -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./var/run/heap-dump.hprof
      -Dfile.encoding=UTF-8 -Dcom.sun.management.jmxremote -Dcom.sun.management.
      jmxremote.port=${JMX_PORT:-0} -Dcom.sun.management.jmxremote.ssl=false
       -Dcom.sun.management.jmxremote.authenticate=false"

NewRatio:新生代和老年代的比值

MaxTenuringThreshold:对象晋升老年代年龄阈值,参数值最大为15,Parallel Scavenge中默认值为15,CMS中默认值为6,G1中默认值为15。关联配置TargetSurvivorRatio,默认值为50,即期望Survivor区的比率,当survivor中对象大小之和超过这个数值,将会重新计算对象晋升的代数age,min(age, MaxTenuringThreshold),以后不需要等到MaxTenuringThreshold再晋升到老年代。

InitiatingHeapOccupancyPercent:触发标记周期的Java 堆占用率阈值,就是说当使用内存占到堆总大小的45%的时候,G1将开始并发标记阶段。为混合GC做准备,如果这个数值设定过大会导致JVM无法启动并发标记,直接进行FullGC处理。

 

ParallelGCThreads:

设置 STW 工作线程数的值。将 n 的值设置为逻辑处理器的数量。n 的值与逻辑处理器的数量相同,最多为 8。

如果逻辑处理器不止八个,则将 n 的值设置为逻辑处理器数的 5/8 左右。

 

混合回收(Mixed GC)

能并发清理老年代中的整个整个的小堆区是一种最优情形。混合收集过程,不只清理年轻代,还会将一部分老年代区域也加入到 CSet 中。

通过 Concurrent Marking 阶段,我们已经统计了老年代的垃圾占比。在 Minor GC 之后,如果判断这个占比达到了某个阈值,下次就会触发 Mixed GC。这个阈值,由 -XX:G1HeapWastePercent 参数进行设置(默认是堆大小的 5%)。因为这种情况下, GC 会花费很多的时间但是回收到的内存却很少,所以可以不需要进行混合收集,通过这个参数调整 Mixed GC 的频率。

还有参数 G1MixedGCCountTarget,用于控制一次并发标记之后,最多执行 Mixed GC 的次数。也可以理解为一个混合收集周期中包含多少次混合收集。

 

你可能感兴趣的:(JVM)