前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、JVM参数

1.1、项目使用

1.1.1、XM

"http_port=8391
server_port=8392
jvm_args='-Xmn256M -Xmx1024M -Xms1024M -XX:MaxPermSize=256M -XX:PermSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=50 -XX:+UseCMSCompactAtFullCollection -XX:MaxTenuringThreshold=10 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintFlagsFinal -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8393 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xloggc:/usr/local/service/log/scf/scf-manager/gc.log -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19137 -Dlog4j2.isThreadContextMapInheritable=true'"



-Xmn256M -Xmx1024M -Xms1024M 
-XX:MaxPermSize=256M -XX:PermSize=256M -XX:SurvivorRatio=8 
-XX:+UseConcMarkSweepGC   //使用CMS
-XX:CMSFullGCsBeforeCompaction=50  //   多少次FULL GC 后压缩老年代
-XX:+UseCMSCompactAtFullCollection  // UseCMSCompactAtFullCollection 是否压缩,默认true
-XX:MaxTenuringThreshold=10  //老年代最大年龄
-verbose:gc  //打印GC日志
-XX:+PrintGCDetails  //输出GC的详细日志
-XX:+PrintGCTimeStamps  //日志钱打印时间戳
-XX:+PrintGCDateStamps  //打印日期
-XX:+PrintFlagsFinal  //打印所有的系统参数的值(
-Dcom.sun.management.jmxremote    //JVM监控
-Dcom.sun.management.jmxremote.port=8393 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Xloggc:/usr/local/service/log/scf/scf-manager/gc.log  //日志文件的输出路径
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19137 
-Dlog4j2.isThreadContextMapInheritable=true
    
    
    
    
    
    
class c4 inherits base {
    $jvm_args = ["-Xmn512M", "-Xmx4096M", "-Xms4096M", "-XX:MaxMetaspaceSize=256M", "-XX:MetaspaceSize=256M", "-XX:MaxPermSize=256M", "-XX:PermSize=256M", "-XX:SurvivorRatio=8",
       "-XX:+UseConcMarkSweepGC", "-XX:CMSFullGCsBeforeCompaction=50", "-XX:+UseCMSCompactAtFullCollection", "-Duse.local.proxy=false",
       "-XX:MaxTenuringThreshold=10", "-verbose:gc", "-XX:+PrintGCDetails", "-XX:+PrintGCTimeStamps", "-XX:+PrintGCDateStamps", "-XX:+PrintFlagsFinal", "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.port=${jmx_port}", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.authenticate=false", "-Xloggc:${log_dir}/gc.log",
       "-Dcom.sun.management.jmxremote.host=127.0.0.1","-Djava.rmi.server.hostname=127.0.0.1"]
}

class staging inherits base {
    $jvm_args = ["-Xmn256M", "-Xmx1024M", "-Xms1024M", "-XX:MaxPermSize=256M", "-XX:PermSize=256M", "-XX:SurvivorRatio=8",
     "-XX:+UseConcMarkSweepGC", "-XX:CMSFullGCsBeforeCompaction=50", "-XX:+UseCMSCompactAtFullCollection",
     "-XX:MaxTenuringThreshold=10", "-verbose:gc", "-XX:+PrintGCDetails", "-XX:+PrintGCTimeStamps", "-XX:+PrintGCDateStamps",
     "-XX:+PrintFlagsFinal", "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.port=${jmx_port}",
     "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.authenticate=false",
     "-Xloggc:${log_dir}/gc.log","-Dlog4j2.isThreadContextMapInheritable=true",
     "-Dcom.sun.management.jmxremote.host=127.0.0.1","-Djava.rmi.server.hostname=127.0.0.1"]
}

1.1.2、MT

-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 
-Djava.io.tmpdir=/tmp -Djava.net.preferIPv6Addresses=false 
-Djava.io.tmpdir=/tmp -Duser.timezone=GMT+08 
-Xss512k -Xmx4096m -Xms4096m 
-XX:MetaspaceSize=512m 
-XX:MaxMetaspaceSize=512m 
-XX:+AlwaysPreTouch 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+UseG1GC 
-XX:G1HeapRegionSize=4M 
-XX:InitiatingHeapOccupancyPercent=40 
-XX:MaxGCPauseMillis=100 
-XX:+TieredCompilation 
-XX:CICompilerCount=4 
-XX:-UseBiasedLocking 
-XX:+PrintGCDetails 
-XX:+PrintHeapAtGC 
-XX:+PrintTenuringDistribution 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps 
-XX:+PrintStringTableStatistics 
-XX:+PrintAdaptiveSizePolicy 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintFlagsFinal 
-XX:-UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=10 
-XX:GCLogFileSize=10M 
-Xloggc:/var/sankuai/logs/com.sankuai.windmill.riding.facadeapi/gc.log.20210728 
-XX:ErrorFile=/var/sankuai/logs/com.sankuai.windmill.riding.facadeapi/vmerr.log.20210728 
-XX:HeapDumpPath=/var/sankuai/logs/com.sankuai.windmill.riding.facadeapi/heaperr.log.20210728 
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8418 
-javaagent:/opt/meituan/qa_test/jacocoagent.jar=output=tcpserver,port=6300,address=*,excludes=com.dianping.* 
-Dspring.profiles.active=test -jar ./facade-api-1.0.0.jar

1.2、参数说明

1.2.1、GC日志查看

-XX:+PrintGC           输出GC日志
-XX:+PrintGCDetails    输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC     在进行GC的前后打印出堆的信息
-XX:+PrintFlagsFinal 
-Xloggc:../logs/gc.log 日志文件的输出路径

1.2.1.1、-XX:+PrintGC -verbose:gc

输出GC日志: -XX:+PrintGC 与 -verbose:gc 是一样的,可以认为-verbose:gc 是 -XX:+PrintGC的别名

注意:PrintGC必须开启,只开启PrintGCDetails、PrintGCTimeStamps不会输出GC,必须PrintGC同时开启,一般情况下,配置了其他的,-XX:+PrintGC会被自动打开

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 
-verbose:gc

[GC (System.gc())  2635K->1065K(19456K), 0.0017115 secs]
[Full GC (System.gc())  1065K->917K(19456K), 0.0047886 secs]
-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 
-XX:+PrintG

[GC (System.gc())  2635K->1040K(19456K), 0.0013182 secs]
[Full GC (System.gc())  1040K->917K(19456K), 0.0053261 secs]
参数 默认值 用法
-verbose: 在输出设备上显示虚拟机运行信息
  verbose:class 在程序运行的时候有多少类被加载!可以用verbose:class来监视
  verbose:gc 在虚拟机发生内存回收时在输出设备显示信息,格式如下: [Full GC 256K->160K(124096K), 0.0042708 secs] 该参数用来监视虚拟机内存回收的情况。
  verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。

1.2.1.2、-XX:+PrintGCDetails

输出GC的详细日志

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -
verbose:gc 
-XX:+PrintGCDetails
[GC (System.gc()) [PSYoungGen: 2635K->1008K(9216K)] 2635K->1158K(19456K), 0.0013864 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (System.gc()) [PSYoungGen: 1008K->0K(9216K)] [ParOldGen: 150K->918K(10240K)] 1158K->918K(19456K), [Metaspace: 3218K->3218K(1056768K)], 0.0054385 secs] [Times: user=0.09 sys=0.00, real=0.01 secs] 
Heap
 PSYoungGen      total 9216K, used 246K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 3% used [0x00000000ff600000,0x00000000ff63d8e0,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 918K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 8% used [0x00000000fec00000,0x00000000fece5b50,0x00000000ff600000)
 Metaspace       used 3234K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 309K, capacity 388K, committed 512K, reserved 1048576K


1.2.1.3、-XX:+PrintGCTimeStamps

输出GC的时间戳(以基准时间的形式:-XX:+PrintGCTimeStamps

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 
-verbose:gc 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps
0.313: [GC (System.gc()) [PSYoungGen: 2635K->1008K(9216K)] 2635K->1122K(19456K), 0.0011256 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
0.315: [Full GC (System.gc()) [PSYoungGen: 1008K->0K(9216K)] [ParOldGen: 114K->918K(10240K)] 1122K->918K(19456K), [Metaspace: 3222K->3222K(1056768K)], 0.0051251 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 9216K, used 246K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 3% used [0x00000000ff600000,0x00000000ff63d888,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 918K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 8% used [0x00000000fec00000,0x00000000fece59a8,0x00000000ff600000)
 Metaspace       used 3245K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 311K, capacity 388K, committed 512K, reserved 1048576K

1.2.1.4、-XX:+PrintGCDateStamps

输出GC的日期

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -verbose:gc -XX:+PrintGCDetails 
 -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
2019-12-24T11:34:45.910+0800: 0.343: [GC (System.gc()) [PSYoungGen: 2635K->1008K(9216K)] 2635K->1158K(19456K), 0.0018725 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2019-12-24T11:34:45.912+0800: 0.345: [Full GC (System.gc()) [PSYoungGen: 1008K->0K(9216K)] [ParOldGen: 150K->917K(10240K)] 1158K->917K(19456K), [Metaspace: 3206K->3206K(1056768K)], 0.0053643 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
Heap
 PSYoungGen      total 9216K, used 82K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 1% used [0x00000000ff600000,0x00000000ff614920,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 917K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 8% used [0x00000000fec00000,0x00000000fece54d0,0x00000000ff600000)
 Metaspace       used 3213K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 304K, capacity 388K, committed 512K, reserved 1048576K

1.2.2、-XX:+PrintHeapAtGC

在进行GC的前后打印出堆的信息(-XX:+PrintHeapAtGC :)

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 
-verbose:gc 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCTimeStamps 
-XX:+PrintHeapAtGC
{Heap before GC invocations=1 (full 0):
 PSYoungGen      total 9216K, used 2635K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 32% used [0x00000000ff600000,0x00000000ff892dc8,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
  to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
 ParOldGen       total 10240K, used 0K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 0% used [0x00000000fec00000,0x00000000fec00000,0x00000000ff600000)
 Metaspace       used 3206K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 304K, capacity 388K, committed 512K, reserved 1048576K
2019-12-24T13:48:42.020+0800: 0.384: [GC (System.gc()) [PSYoungGen: 2635K->1016K(9216K)] 2635K->1100K(19456K), 0.0010979 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap after GC invocations=1 (full 0):
 PSYoungGen      total 9216K, used 1016K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 0% used [0x00000000ff600000,0x00000000ff600000,0x00000000ffe00000)
  from space 1024K, 99% used [0x00000000ffe00000,0x00000000ffefe010,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 84K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 0% used [0x00000000fec00000,0x00000000fec15240,0x00000000ff600000)
 Metaspace       used 3206K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 304K, capacity 388K, committed 512K, reserved 1048576K
}
{Heap before GC invocations=2 (full 1):
 PSYoungGen      total 9216K, used 1016K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 0% used [0x00000000ff600000,0x00000000ff600000,0x00000000ffe00000)
  from space 1024K, 99% used [0x00000000ffe00000,0x00000000ffefe010,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 84K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 0% used [0x00000000fec00000,0x00000000fec15240,0x00000000ff600000)
 Metaspace       used 3206K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 304K, capacity 388K, committed 512K, reserved 1048576K
2019-12-24T13:48:42.021+0800: 0.385: [Full GC (System.gc()) [PSYoungGen: 1016K->0K(9216K)] [ParOldGen: 84K->917K(10240K)] 1100K->917K(19456K), [Metaspace: 3206K->3206K(1056768K)], 0.0049082 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
Heap after GC invocations=2 (full 1):
 PSYoungGen      total 9216K, used 0K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 0% used [0x00000000ff600000,0x00000000ff600000,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 917K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 8% used [0x00000000fec00000,0x00000000fece54d0,0x00000000ff600000)
 Metaspace       used 3206K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 304K, capacity 388K, committed 512K, reserved 1048576K
}
Heap
 PSYoungGen      total 9216K, used 246K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 3% used [0x00000000ff600000,0x00000000ff63d890,0x00000000ffe00000)
  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 917K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 8% used [0x00000000fec00000,0x00000000fece54d0,0x00000000ff600000)
 Metaspace       used 3222K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 306K, capacity 388K, committed 512K, reserved 1048576K

1.2.3、 -XX:+PrintTenuringDistribution

打印出Survivor空间中的对象的年龄分布(-XX:+PrintTenuringDistribution :)

-XX:+PrintTenuringDistribution
Desired survivor size 75497472 bytes, new threshold 15 (max 15)
- age   1:   19321624 bytes,   19321624 total
- age   2:      79376 bytes,   19401000 total
- age   3:    2904256 bytes,   22305256 total

从第一行中可以看出JVM期望的Survivor空间占用为72M,对象被移到老年代中的年龄阈值为15。其中期望的Survivor空间大小为Survivor空间大小 x -XX:TargetSurvivorRatio的值。  

年龄为1的对象约19M,年龄为2的对象约79k,年龄为3的对象约为2.9M,每行后面的数值表示所有小于等于该行年龄的对象的总共大小   
比如:,比如最后一行就表示所有年龄小于等于3的对象的总共大小为约22M(等于所有年龄对象大小的和)。因为目前Survivor空间中对象的大小22M小于期望Survivor空间的大小72M,所以没有对象会被移到老年代。

1.2.4、-XX:+PrintFlagsFinal

打印所有的系统参数的值

java -XX:+PrintFlagsFinal -version | grep MetaspaceSiz
-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8  
-verbose:gc  
-XX:+PrintGCDetails  
-XX:+PrintGCDateStamps  
-XX:+PrintGCTimeStamps   
-XX:+PrintFlagsFinal 

[Global flags]
     intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}
     bool AggressiveHeap                            = false                               {product}
     bool AggressiveOpts                            = false                               {product}
     intx AliasLevel                                = 3                                   {C2 product}
     bool AlignVector                               = false                               {C2 product}
     intx AllocateInstancePrefetchLines             = 1                                   {product}
     intx AllocatePrefetchDistance                  = 192                                 {product}
     intx AllocatePrefetchInstr                     = 3                                   {product}
     intx AllocatePrefetchLines                     = 4                                   {product}
     intx AllocatePrefetchStepSize                  = 64                                  {product}
     intx AllocatePrefetchStyle                     = 1                                   {product}
     bool AllowJNIEnvProxy                          = false                               {product}
     bool AllowNonVirtualCalls                      = false                               {product}
     bool AllowParallelDefineClass                  = false                               {product}
     bool AllowUserSignalHandlers                   = false                               {product}
     bool AlwaysActAsServerClassMachine             = false                               {product}
     bool AlwaysCompileLoopMethods                  = false                               {product}
     bool AlwaysLockClassLoader                     = false                               {product}
     bool AlwaysPreTouch                            = false                               {product}
     bool AlwaysRestoreFPU                          = false                               {product}
     bool AlwaysTenure                              = false                               {product}
     bool AssertOnSuspendWaitFailure                = false                               {product}
     bool AssumeMP                                  = false                               {product}
     intx AutoBoxCacheMax                           = 128                                 {C2 product}
    uintx AutoGCSelectPauseMillis                   = 5000                                {product}
     intx BCEATraceLevel                            = 0                                   {product}
     intx BackEdgeThreshold                         = 100000                              {pd product}
     bool BackgroundCompilation                     = true                                {pd product}
    uintx BaseFootPrintEstimate                     = 268435456                           {product}
     intx BiasedLockingBulkRebiasThreshold          = 20                                  {product}
     intx BiasedLockingBulkRevokeThreshold          = 40                                  {product}
     intx BiasedLockingDecayTime                    = 25000                               {product}
     intx BiasedLockingStartupDelay                 = 4000                                {product}
     bool BindGCTaskThreadsToCPUs                   = false                               {product}
     bool BlockLayoutByFrequency                    = true                                {C2 product}
     intx BlockLayoutMinDiamondPercentage           = 20                                  {C2 product}
     bool BlockLayoutRotateLoops                    = true                                {C2 product}
     bool BranchOnRegister                          = false                               {C2 product}
     bool BytecodeVerificationLocal                 = false                               {product}
     bool BytecodeVerificationRemote                = true                                {product}
     bool C1OptimizeVirtualCallProfiling            = true                                {C1 product}
     bool C1ProfileBranches                         = true                                {C1 product}
     bool C1ProfileCalls                            = true                                {C1 product}
     bool C1ProfileCheckcasts                       = true                                {C1 product}
     bool C1ProfileInlinedCalls                     = true                                {C1 product}
     bool C1ProfileVirtualCalls                     = true                                {C1 product}
     bool C1UpdateMethodData                        = true                                {C1 product}
     intx CICompilerCount                          := 4                                   {product}
     bool CICompilerCountPerCPU                     = true                                {product}
     bool CITime                                    = false                               {product}
     bool CMSAbortSemantics                         = false                               {product}
    uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}
     intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}
    uintx CMSBitMapYieldQuantum                     = 10485760                            {product}
    uintx CMSBootstrapOccupancy                     = 50                                  {product}
     bool CMSClassUnloadingEnabled                  = true                                {product}
    uintx CMSClassUnloadingMaxInterval              = 0                                   {product}
     bool CMSCleanOnEnter                           = true                                {product}
     bool CMSCompactWhenClearAllSoftRefs            = true                                {product}
    uintx CMSConcMarkMultiple                       = 32                                  {product}
     bool CMSConcurrentMTEnabled                    = true                                {product}
    uintx CMSCoordinatorYieldSleepCount             = 10                                  {product}
     bool CMSDumpAtPromotionFailure                 = false                               {product}
     bool CMSEdenChunksRecordAlways                 = true                                {product}
    uintx CMSExpAvgFactor                           = 50                                  {product}
     bool CMSExtrapolateSweep                       = false                               {product}
    uintx CMSFullGCsBeforeCompaction                = 0                                   {product}
    uintx CMSIncrementalDutyCycle                   = 10                                  {product}
    uintx CMSIncrementalDutyCycleMin                = 0                                   {product}
     bool CMSIncrementalMode                        = false                               {product}
    uintx CMSIncrementalOffset                      = 0                                   {product}
     bool CMSIncrementalPacing                      = true                                {product}
    uintx CMSIncrementalSafetyFactor                = 10                                  {product}
    uintx CMSIndexedFreeListReplenish               = 4                                   {product}
     intx CMSInitiatingOccupancyFraction            = -1                                  {product}
    uintx CMSIsTooFullPercentage                    = 98                                  {product}
   double CMSLargeCoalSurplusPercent                = 0.950000                            {product}
   double CMSLargeSplitSurplusPercent               = 1.000000                            {product}
     bool CMSLoopWarn                               = false                               {product}
    uintx CMSMaxAbortablePrecleanLoops              = 0                                   {product}
     intx CMSMaxAbortablePrecleanTime               = 5000                                {product}
    uintx CMSOldPLABMax                             = 1024                                {product}
    uintx CMSOldPLABMin                             = 16                                  {product}
    uintx CMSOldPLABNumRefills                      = 4                                   {product}
    uintx CMSOldPLABReactivityFactor                = 2                                   {product}
     bool CMSOldPLABResizeQuicker                   = false                               {product}
    uintx CMSOldPLABToleranceFactor                 = 4                                   {product}
     bool CMSPLABRecordAlways                       = true                                {product}
    uintx CMSParPromoteBlocksToClaim                = 16                                  {product}
     bool CMSParallelInitialMarkEnabled             = true                                {product}
     bool CMSParallelRemarkEnabled                  = true                                {product}
     bool CMSParallelSurvivorRemarkEnabled          = true                                {product}
    uintx CMSPrecleanDenominator                    = 3                                   {product}
    uintx CMSPrecleanIter                           = 3                                   {product}
    uintx CMSPrecleanNumerator                      = 2                                   {product}
     bool CMSPrecleanRefLists1                      = true                                {product}
     bool CMSPrecleanRefLists2                      = false                               {product}
     bool CMSPrecleanSurvivors1                     = false                               {product}
     bool CMSPrecleanSurvivors2                     = true                                {product}
    uintx CMSPrecleanThreshold                      = 1000                                {product}
     bool CMSPrecleaningEnabled                     = true                                {product}
     bool CMSPrintChunksInDump                      = false                               {product}
     bool CMSPrintEdenSurvivorChunks                = false                               {product}
     bool CMSPrintObjectsInDump                     = false                               {product}
    uintx CMSRemarkVerifyVariant                    = 1                                   {product}
     bool CMSReplenishIntermediate                  = true                                {product}
    uintx CMSRescanMultiple                         = 32                                  {product}
    uintx CMSSamplingGrain                          = 16384                               {product}
     bool CMSScavengeBeforeRemark                   = false                               {product}
    uintx CMSScheduleRemarkEdenPenetration          = 50                                  {product}
    uintx CMSScheduleRemarkEdenSizeThreshold        = 2097152                             {product}
    uintx CMSScheduleRemarkSamplingRatio            = 5                                   {product}
   double CMSSmallCoalSurplusPercent                = 1.050000                            {product}
   double CMSSmallSplitSurplusPercent               = 1.100000                            {product}
     bool CMSSplitIndexedFreeListBlocks             = true                                {product}
     intx CMSTriggerInterval                        = -1                                  {manageable}
    uintx CMSTriggerRatio                           = 80                                  {product}
     intx CMSWaitDuration                           = 2000                                {manageable}
    uintx CMSWorkQueueDrainThreshold                = 10                                  {product}
     bool CMSYield                                  = true                                {product}
    uintx CMSYieldSleepCount                        = 0                                   {product}
    uintx CMSYoungGenPerWorker                      = 67108864                            {pd product}
    uintx CMS_FLSPadding                            = 1                                   {product}
    uintx CMS_FLSWeight                             = 75                                  {product}
    uintx CMS_SweepPadding                          = 1                                   {product}
    uintx CMS_SweepTimerThresholdMillis             = 10                                  {product}
    uintx CMS_SweepWeight                           = 75                                  {product}
     bool CheckEndorsedAndExtDirs                   = false                               {product}
     bool CheckJNICalls                             = false                               {product}
     bool ClassUnloading                            = true                                {product}
     bool ClassUnloadingWithConcurrentMark          = true                                {product}
     intx ClearFPUAtPark                            = 0                                   {product}
     bool ClipInlining                              = true                                {product}
    uintx CodeCacheExpansionSize                    = 65536                               {pd product}
    uintx CodeCacheMinimumFreeSpace                 = 512000                              {product}
     bool CollectGen0First                          = false                               {product}
     bool CompactFields                             = true                                {product}
     intx CompilationPolicyChoice                   = 3                                   {product}
ccstrlist CompileCommand                            =                                     {product}
    ccstr CompileCommandFile                        =                                     {product}
ccstrlist CompileOnly                               =                                     {product}
     intx CompileThreshold                          = 10000                               {pd product}
     bool CompilerThreadHintNoPreempt               = true                                {product}
     intx CompilerThreadPriority                    = -1                                  {product}
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx CompressedClassSpaceSize                  = 1073741824                          {product}
    uintx ConcGCThreads                             = 0                                   {product}
     intx ConditionalMoveLimit                      = 3                                   {C2 pd product}
     intx ContendedPaddingWidth                     = 128                                 {product}
     bool ConvertSleepToYield                       = true                                {pd product}
     bool ConvertYieldToSleep                       = false                               {product}
     bool CrashOnOutOfMemoryError                   = false                               {product}
     bool CreateMinidumpOnCrash                     = false                               {product}
     bool CriticalJNINatives                        = true                                {product}
     bool DTraceAllocProbes                         = false                               {product}
     bool DTraceMethodProbes                        = false                               {product}
     bool DTraceMonitorProbes                       = false                               {product}
     bool Debugging                                 = false                               {product}
    uintx DefaultMaxRAMFraction                     = 4                                   {product}
     intx DefaultThreadPriority                     = -1                                  {product}
     intx DeferPollingPageLoopCount                 = -1                                  {product}
     intx DeferThrSuspendLoopCount                  = 4000                                {product}
     bool DeoptimizeRandom                          = false                               {product}
     bool DisableAttachMechanism                    = false                               {product}
     bool DisableExplicitGC                         = false                               {product}
     bool DisplayVMOutputToStderr                   = false                               {product}
     bool DisplayVMOutputToStdout                   = false                               {product}
     bool DoEscapeAnalysis                          = true                                {C2 product}
     bool DontCompileHugeMethods                    = true                                {product}
     bool DontYieldALot                             = false                               {pd product}
    ccstr DumpLoadedClassList                       =                                     {product}
     bool DumpReplayDataOnError                     = true                                {product}
     bool DumpSharedSpaces                          = false                               {product}
     bool EagerXrunInit                             = false                               {product}
     intx EliminateAllocationArraySizeLimit         = 64                                  {C2 product}
     bool EliminateAllocations                      = true                                {C2 product}
     bool EliminateAutoBox                          = true                                {C2 product}
     bool EliminateLocks                            = true                                {C2 product}
     bool EliminateNestedLocks                      = true                                {C2 product}
     intx EmitSync                                  = 0                                   {product}
     bool EnableContended                           = true                                {product}
     bool EnableTracing                             = false                               {product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    ccstr ErrorFile                                 =                                     {product}
    ccstr ErrorReportServer                         =                                     {product}
   double EscapeAnalysisTimeout                     = 20.000000                           {C2 product}
     bool EstimateArgEscape                         = true                                {product}
     bool ExitOnOutOfMemoryError                    = false                               {product}
     bool ExplicitGCInvokesConcurrent               = false                               {product}
     bool ExplicitGCInvokesConcurrentAndUnloadsClasses  = false                               {product}
     bool ExtendedDTraceProbes                      = false                               {product}
    ccstr ExtraSharedClassListFile                  =                                     {product}
     bool FLSAlwaysCoalesceLarge                    = false                               {product}
    uintx FLSCoalescePolicy                         = 2                                   {product}
   double FLSLargestBlockCoalesceProximity          = 0.990000                            {product}
     bool FailOverToOldVerifier                     = true                                {product}
     bool FastTLABRefill                            = true                                {product}
     intx FenceInstruction                          = 0                                   {ARCH product}
     intx FieldsAllocationStyle                     = 1                                   {product}
     bool FilterSpuriousWakeups                     = true                                {product}
     bool ForceNUMA                                 = false                               {product}
     bool ForceTimeHighResolution                   = false                               {product}
     intx FreqInlineSize                            = 325                                 {pd product}
   double G1ConcMarkStepDurationMillis              = 10.000000                           {product}
    uintx G1ConcRSHotCardLimit                      = 4                                   {product}
    uintx G1ConcRSLogCacheSize                      = 10                                  {product}
     intx G1ConcRefinementGreenZone                 = 0                                   {product}
     intx G1ConcRefinementRedZone                   = 0                                   {product}
     intx G1ConcRefinementServiceIntervalMillis     = 300                                 {product}
    uintx G1ConcRefinementThreads                   = 0                                   {product}
     intx G1ConcRefinementThresholdStep             = 0                                   {product}
     intx G1ConcRefinementYellowZone                = 0                                   {product}
    uintx G1ConfidencePercent                       = 50                                  {product}
    uintx G1HeapRegionSize                          = 0                                   {product}
    uintx G1HeapWastePercent                        = 5                                   {product}
    uintx G1MixedGCCountTarget                      = 8                                   {product}
     intx G1RSetRegionEntries                       = 0                                   {product}
    uintx G1RSetScanBlockSize                       = 64                                  {product}
     intx G1RSetSparseRegionEntries                 = 0                                   {product}
     intx G1RSetUpdatingPauseTimePercent            = 10                                  {product}
     intx G1RefProcDrainInterval                    = 10                                  {product}
    uintx G1ReservePercent                          = 10                                  {product}
    uintx G1SATBBufferEnqueueingThresholdPercent    = 60                                  {product}
     intx G1SATBBufferSize                          = 1024                                {product}
     intx G1UpdateBufferSize                        = 256                                 {product}
     bool G1UseAdaptiveConcRefinement               = true                                {product}
    uintx GCDrainStackTargetSize                    = 64                                  {product}
    uintx GCHeapFreeLimit                           = 2                                   {product}
    uintx GCLockerEdenExpansionPercent              = 5                                   {product}
     bool GCLockerInvokesConcurrent                 = false                               {product}
    uintx GCLogFileSize                             = 8192                                {product}
    uintx GCPauseIntervalMillis                     = 0                                   {product}
    uintx GCTaskTimeStampEntries                    = 200                                 {product}
    uintx GCTimeLimit                               = 98                                  {product}
    uintx GCTimeRatio                               = 99                                  {product}
    uintx HeapBaseMinAddress                        = 2147483648                          {pd product}
     bool HeapDumpAfterFullGC                       = false                               {manageable}
     bool HeapDumpBeforeFullGC                      = false                               {manageable}
     bool HeapDumpOnOutOfMemoryError                = false                               {manageable}
    ccstr HeapDumpPath                              =                                     {manageable}
    uintx HeapFirstMaximumCompactionCount           = 3                                   {product}
    uintx HeapMaximumCompactionInterval             = 20                                  {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
     bool IgnoreEmptyClassPaths                     = false                               {product}
     bool IgnoreUnrecognizedVMOptions               = false                               {product}
    uintx IncreaseFirstTierCompileThresholdAt       = 50                                  {product}
     bool IncrementalInline                         = true                                {C2 product}
    uintx InitialBootClassLoaderMetaspaceSize       = 4194304                             {product}
    uintx InitialCodeCacheSize                      = 2555904                             {pd product}
    uintx InitialHeapSize                          := 20971520                            {product}
    uintx InitialRAMFraction                        = 64                                  {product}
   double InitialRAMPercentage                      = 1.562500                            {product}
    uintx InitialSurvivorRatio                      = 10                                  {product}
    uintx InitialTenuringThreshold                  = 7                                   {product}
    uintx InitiatingHeapOccupancyPercent            = 45                                  {product}
     bool Inline                                    = true                                {product}
    ccstr InlineDataFile                            =                                     {product}
     intx InlineSmallCode                           = 2000                                {pd product}
     bool InlineSynchronizedMethods                 = true                                {C1 product}
     bool InsertMemBarAfterArraycopy                = true                                {C2 product}
     intx InteriorEntryAlignment                    = 16                                  {C2 pd product}
     intx InterpreterProfilePercentage              = 33                                  {product}
     bool JNIDetachReleasesMonitors                 = true                                {product}
     bool JavaMonitorsInStackTrace                  = true                                {product}
     intx JavaPriority10_To_OSPriority              = -1                                  {product}
     intx JavaPriority1_To_OSPriority               = -1                                  {product}
     intx JavaPriority2_To_OSPriority               = -1                                  {product}
     intx JavaPriority3_To_OSPriority               = -1                                  {product}
     intx JavaPriority4_To_OSPriority               = -1                                  {product}
     intx JavaPriority5_To_OSPriority               = -1                                  {product}
     intx JavaPriority6_To_OSPriority               = -1                                  {product}
     intx JavaPriority7_To_OSPriority               = -1                                  {product}
     intx JavaPriority8_To_OSPriority               = -1                                  {product}
     intx JavaPriority9_To_OSPriority               = -1                                  {product}
     bool LIRFillDelaySlots                         = false                               {C1 pd product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx LargePageSizeInBytes                      = 0                                   {product}
     bool LazyBootClassLoader                       = true                                {product}
     intx LiveNodeCountInliningCutoff               = 40000                               {C2 product}
     intx LoopMaxUnroll                             = 16                                  {C2 product}
     intx LoopOptsCount                             = 43                                  {C2 product}
     intx LoopUnrollLimit                           = 60                                  {C2 pd product}
     intx LoopUnrollMin                             = 4                                   {C2 product}
     bool LoopUnswitching                           = true                                {C2 product}
     bool ManagementServer                          = false                               {product}
    uintx MarkStackSize                             = 4194304                             {product}
    uintx MarkStackSizeMax                          = 536870912                           {product}
    uintx MarkSweepAlwaysCompactCount               = 4                                   {product}
    uintx MarkSweepDeadRatio                        = 1                                   {product}
     intx MaxBCEAEstimateLevel                      = 5                                   {product}
     intx MaxBCEAEstimateSize                       = 150                                 {product}
    uintx MaxDirectMemorySize                       = 0                                   {product}
     bool MaxFDLimit                                = true                                {product}
    uintx MaxGCMinorPauseMillis                     = 4294967295                          {product}
    uintx MaxGCPauseMillis                          = 4294967295                          {product}
    uintx MaxHeapFreeRatio                          = 100                                 {manageable}
    uintx MaxHeapSize                              := 20971520                            {product}
     intx MaxInlineLevel                            = 9                                   {product}
     intx MaxInlineSize                             = 35                                  {product}
     intx MaxJNILocalCapacity                       = 65536                               {product}
     intx MaxJavaStackTraceDepth                    = 1024                                {product}
     intx MaxJumpTableSize                          = 65000                               {C2 product}
     intx MaxJumpTableSparseness                    = 5                                   {C2 product}
     intx MaxLabelRootDepth                         = 1100                                {C2 product}
     intx MaxLoopPad                                = 11                                  {C2 product}
    uintx MaxMetaspaceExpansion                     = 5451776                             {product}
    uintx MaxMetaspaceFreeRatio                     = 70                                  {product}
    uintx MaxMetaspaceSize                          = 4294901760                          {product}
    uintx MaxNewSize                               := 10485760                            {product}
     intx MaxNodeLimit                              = 75000                               {C2 product}
 uint64_t MaxRAM                                    = 0                                   {pd product}
    uintx MaxRAMFraction                            = 4                                   {product}
   double MaxRAMPercentage                          = 25.000000                           {product}
     intx MaxRecursiveInlineLevel                   = 1                                   {product}
    uintx MaxTenuringThreshold                      = 15                                  {product}
     intx MaxTrivialSize                            = 6                                   {product}
     intx MaxVectorSize                             = 32                                  {C2 product}
    uintx MetaspaceSize                             = 21807104                            {pd product}
     bool MethodFlushing                            = true                                {product}
    uintx MinHeapDeltaBytes                        := 524288                              {product}
    uintx MinHeapFreeRatio                          = 0                                   {manageable}
     intx MinInliningThreshold                      = 250                                 {product}
     intx MinJumpTableSize                          = 10                                  {C2 pd product}
    uintx MinMetaspaceExpansion                     = 339968                              {product}
    uintx MinMetaspaceFreeRatio                     = 40                                  {product}
    uintx MinRAMFraction                            = 2                                   {product}
   double MinRAMPercentage                          = 50.000000                           {product}
    uintx MinSurvivorRatio                          = 10                                  {product}
    uintx MinTLABSize                               = 2048                                {product}
     intx MonitorBound                              = 0                                   {product}
     bool MonitorInUseLists                         = false                               {product}
     intx MultiArrayExpandLimit                     = 6                                   {C2 product}
     bool MustCallLoadClassInternal                 = false                               {product}
    uintx NUMAChunkResizeWeight                     = 20                                  {product}
    uintx NUMAInterleaveGranularity                 = 2097152                             {product}
    uintx NUMAPageScanRate                          = 256                                 {product}
    uintx NUMASpaceResizeRate                       = 1073741824                          {product}
     bool NUMAStats                                 = false                               {product}
    ccstr NativeMemoryTracking                      = off                                 {product}
     bool NeedsDeoptSuspend                         = false                               {pd product}
     bool NeverActAsServerClassMachine              = false                               {pd product}
     bool NeverTenure                               = false                               {product}
    uintx NewRatio                                  = 2                                   {product}
    uintx NewSize                                  := 10485760                            {product}
    uintx NewSizeThreadIncrease                     = 5320                                {pd product}
     intx NmethodSweepActivity                      = 10                                  {product}
     intx NmethodSweepCheckInterval                 = 5                                   {product}
     intx NmethodSweepFraction                      = 16                                  {product}
     intx NodeLimitFudgeFactor                      = 2000                                {C2 product}
    uintx NumberOfGCLogFiles                        = 0                                   {product}
     intx NumberOfLoopInstrToAlign                  = 4                                   {C2 product}
     intx ObjectAlignmentInBytes                    = 8                                   {lp64_product}
    uintx OldPLABSize                               = 1024                                {product}
    uintx OldPLABWeight                             = 50                                  {product}
    uintx OldSize                                  := 10485760                            {product}
     bool OmitStackTraceInFastThrow                 = true                                {product}
ccstrlist OnError                                   =                                     {product}
ccstrlist OnOutOfMemoryError                        =                                     {product}
     intx OnStackReplacePercentage                  = 140                                 {pd product}
     bool OptimizeFill                              = true                                {C2 product}
     bool OptimizePtrCompare                        = true                                {C2 product}
     bool OptimizeStringConcat                      = true                                {C2 product}
     bool OptoBundling                              = false                               {C2 pd product}
     intx OptoLoopAlignment                         = 16                                  {pd product}
     bool OptoScheduling                            = false                               {C2 pd product}
    uintx PLABWeight                                = 75                                  {product}
     bool PSChunkLargeArrays                        = true                                {product}
     intx ParGCArrayScanChunk                       = 50                                  {product}
    uintx ParGCDesiredObjsFromOverflowList          = 20                                  {product}
     bool ParGCTrimOverflow                         = true                                {product}
     bool ParGCUseLocalOverflow                     = false                               {product}
    uintx ParallelGCBufferWastePct                  = 10                                  {product}
    uintx ParallelGCThreads                         = 8                                   {product}
     bool ParallelGCVerbose                         = false                               {product}
    uintx ParallelOldDeadWoodLimiterMean            = 50                                  {product}
    uintx ParallelOldDeadWoodLimiterStdDev          = 80                                  {product}
     bool ParallelRefProcBalancingEnabled           = true                                {product}
     bool ParallelRefProcEnabled                    = false                               {product}
     bool PartialPeelAtUnsignedTests                = true                                {C2 product}
     bool PartialPeelLoop                           = true                                {C2 product}
     intx PartialPeelNewPhiDelta                    = 0                                   {C2 product}
    uintx PausePadding                              = 1                                   {product}
     intx PerBytecodeRecompilationCutoff            = 200                                 {product}
     intx PerBytecodeTrapLimit                      = 4                                   {product}
     intx PerMethodRecompilationCutoff              = 400                                 {product}
     intx PerMethodTrapLimit                        = 100                                 {product}
     bool PerfAllowAtExitRegistration               = false                               {product}
     bool PerfBypassFileSystemCheck                 = false                               {product}
     intx PerfDataMemorySize                        = 32768                               {product}
     intx PerfDataSamplingInterval                  = 50                                  {product}
    ccstr PerfDataSaveFile                          =                                     {product}
     bool PerfDataSaveToFile                        = false                               {product}
     bool PerfDisableSharedMem                      = false                               {product}
     intx PerfMaxStringConstLength                  = 1024                                {product}
     intx PreInflateSpin                            = 10                                  {pd product}
     bool PreferInterpreterNativeStubs              = false                               {pd product}
     intx PrefetchCopyIntervalInBytes               = 576                                 {product}
     intx PrefetchFieldsAhead                       = 1                                   {product}
     intx PrefetchScanIntervalInBytes               = 576                                 {product}
     bool PreserveAllAnnotations                    = false                               {product}
     bool PreserveFramePointer                      = false                               {pd product}
    uintx PretenureSizeThreshold                    = 0                                   {product}
     bool PrintAdaptiveSizePolicy                   = false                               {product}
     bool PrintCMSInitiationStatistics              = false                               {product}
     intx PrintCMSStatistics                        = 0                                   {product}
     bool PrintClassHistogram                       = false                               {manageable}
     bool PrintClassHistogramAfterFullGC            = false                               {manageable}
     bool PrintClassHistogramBeforeFullGC           = false                               {manageable}
     bool PrintCodeCache                            = false                               {product}
     bool PrintCodeCacheOnCompilation               = false                               {product}
     bool PrintCommandLineFlags                     = false                               {product}
     bool PrintCompilation                          = false                               {product}
     bool PrintConcurrentLocks                      = false                               {manageable}
     intx PrintFLSCensus                            = 0                                   {product}
     intx PrintFLSStatistics                        = 0                                   {product}
     bool PrintFlagsFinal                          := true                                {product}
     bool PrintFlagsInitial                         = false                               {product}
     bool PrintGC                                  := true                                {manageable}
     bool PrintGCApplicationConcurrentTime          = false                               {product}
     bool PrintGCApplicationStoppedTime             = false                               {product}
     bool PrintGCCause                              = true                                {product}
     bool PrintGCDateStamps                        := true                                {manageable}
     bool PrintGCDetails                           := true                                {manageable}
     bool PrintGCID                                 = false                               {manageable}
     bool PrintGCTaskTimeStamps                     = false                               {product}
     bool PrintGCTimeStamps                        := true                                {manageable}
     bool PrintHeapAtGC                             = false                               {product rw}
     bool PrintHeapAtGCExtended                     = false                               {product rw}
     bool PrintHeapAtSIGBREAK                       = true                                {product}
     bool PrintJNIGCStalls                          = false                               {product}
     bool PrintJNIResolving                         = false                               {product}
     bool PrintOldPLAB                              = false                               {product}
     bool PrintOopAddress                           = false                               {product}
     bool PrintPLAB                                 = false                               {product}
     bool PrintParallelOldGCPhaseTimes              = false                               {product}
     bool PrintPromotionFailure                     = false                               {product}
     bool PrintReferenceGC                          = false                               {product}
     bool PrintSafepointStatistics                  = false                               {product}
     intx PrintSafepointStatisticsCount             = 300                                 {product}
     intx PrintSafepointStatisticsTimeout           = -1                                  {product}
     bool PrintSharedArchiveAndExit                 = false                               {product}
     bool PrintSharedDictionary                     = false                               {product}
     bool PrintSharedSpaces                         = false                               {product}
     bool PrintStringDeduplicationStatistics        = false                               {product}
     bool PrintStringTableStatistics                = false                               {product}
     bool PrintTLAB                                 = false                               {product}
     bool PrintTenuringDistribution                 = false                               {product}
     bool PrintTieredEvents                         = false                               {product}
     bool PrintVMOptions                            = false                               {product}
     bool PrintVMQWaitTime                          = false                               {product}
     bool PrintWarnings                             = true                                {product}
    uintx ProcessDistributionStride                 = 4                                   {product}
     bool ProfileInterpreter                        = true                                {pd product}
     bool ProfileIntervals                          = false                               {product}
     intx ProfileIntervalsTicks                     = 100                                 {product}
     intx ProfileMaturityPercentage                 = 20                                  {product}
     bool ProfileVM                                 = false                               {product}
     bool ProfilerPrintByteCodeStatistics           = false                               {product}
     bool ProfilerRecordPC                          = false                               {product}
    uintx PromotedPadding                           = 3                                   {product}
    uintx QueuedAllocationWarningCount              = 0                                   {product}
    uintx RTMRetryCount                             = 5                                   {ARCH product}
     bool RangeCheckElimination                     = true                                {product}
     intx ReadPrefetchInstr                         = 0                                   {ARCH product}
     bool ReassociateInvariants                     = true                                {C2 product}
     bool ReduceBulkZeroing                         = true                                {C2 product}
     bool ReduceFieldZeroing                        = true                                {C2 product}
     bool ReduceInitialCardMarks                    = true                                {C2 product}
     bool ReduceSignalUsage                         = false                               {product}
     intx RefDiscoveryPolicy                        = 0                                   {product}
     bool ReflectionWrapResolutionErrors            = true                                {product}
     bool RegisterFinalizersAtInit                  = true                                {product}
     bool RelaxAccessControlCheck                   = false                               {product}
    ccstr ReplayDataFile                            =                                     {product}
     bool RequireSharedSpaces                       = false                               {product}
    uintx ReservedCodeCacheSize                     = 251658240                           {pd product}
     bool ResizeOldPLAB                             = true                                {product}
     bool ResizePLAB                                = true                                {product}
     bool ResizeTLAB                                = true                                {pd product}
     bool RestoreMXCSROnJNICalls                    = false                               {product}
     bool RestrictContended                         = true                                {product}
     bool RewriteBytecodes                          = true                                {pd product}
     bool RewriteFrequentPairs                      = false                               {pd product}
     intx SafepointPollOffset                       = 256                                 {C1 pd product}
     intx SafepointSpinBeforeYield                  = 2000                                {product}
     bool SafepointTimeout                          = false                               {product}
     intx SafepointTimeoutDelay                     = 10000                               {product}
     bool ScavengeBeforeFullGC                      = true                                {product}
     intx SelfDestructTimer                         = 0                                   {product}
    uintx SharedBaseAddress                         = 0                                   {product}
    ccstr SharedClassListFile                       =                                     {product}
    uintx SharedMiscCodeSize                        = 122880                              {product}
    uintx SharedMiscDataSize                        = 4194304                             {product}
    uintx SharedReadOnlySize                        = 16777216                            {product}
    uintx SharedReadWriteSize                       = 16777216                            {product}
    uintx ShenandoahAllocationThreshold             = 0                                   {product rw}
     bool ShenandoahAlwaysPreTouch                  = false                               {product}
    uintx ShenandoahFreeThreshold                   = 10                                  {product rw}
    uintx ShenandoahFullGCThreshold                 = 3                                   {product rw}
    ccstr ShenandoahGCHeuristics                    = adaptive                            {product}
    uintx ShenandoahGarbageThreshold                = 60                                  {product rw}
    uintx ShenandoahHeapRegionSize                  = 0                                   {product}
     bool ShenandoahLogDebug                        = false                               {product}
     bool ShenandoahLogInfo                         = false                               {product}
     bool ShenandoahLogTrace                        = false                               {product}
     bool ShenandoahLogWarning                      = false                               {product}
     bool ShenandoahOptimizeInstanceFinals          = false                               {product}
     bool ShenandoahOptimizeStableFinals            = false                               {product}
     bool ShenandoahOptimizeStaticFinals            = true                                {product}
    uintx ShenandoahRefProcFrequency                = 5                                   {product}
     bool ShenandoahRegionSampling                  = false                               {product rw}
      int ShenandoahRegionSamplingRate              =                     {product rw}
    uintx ShenandoahUnloadClassesFrequency          = 5                                   {product}
     bool ShowMessageBoxOnError                     = false                               {product}
     intx SoftRefLRUPolicyMSPerMB                   = 1000                                {product}
     bool SpecialEncodeISOArray                     = true                                {C2 product}
     bool SplitIfBlocks                             = true                                {C2 product}
     intx StackRedPages                             = 1                                   {pd product}
     intx StackShadowPages                          = 6                                   {pd product}
     bool StackTraceInThrowable                     = true                                {product}
     intx StackYellowPages                          = 3                                   {pd product}
     bool StartAttachListener                       = false                               {product}
     intx StarvationMonitorInterval                 = 200                                 {product}
     bool StressLdcRewrite                          = false                               {product}
    uintx StringDeduplicationAgeThreshold           = 3                                   {product}
    uintx StringTableSize                           = 60013                               {product}
     bool SuppressFatalErrorMessage                 = false                               {product}
    uintx SurvivorPadding                           = 3                                   {product}
    uintx SurvivorRatio                            := 8                                   {product}
     intx SuspendRetryCount                         = 50                                  {product}
     intx SuspendRetryDelay                         = 5                                   {product}
     intx SyncFlags                                 = 0                                   {product}
    ccstr SyncKnobs                                 =                                     {product}
     intx SyncVerbose                               = 0                                   {product}
    uintx TLABAllocationWeight                      = 35                                  {product}
    uintx TLABRefillWasteFraction                   = 64                                  {product}
    uintx TLABSize                                  = 0                                   {product}
     bool TLABStats                                 = true                                {product}
    uintx TLABWasteIncrement                        = 4                                   {product}
    uintx TLABWasteTargetPercent                    = 1                                   {product}
    uintx TargetPLABWastePct                        = 10                                  {product}
    uintx TargetSurvivorRatio                       = 50                                  {product}
    uintx TenuredGenerationSizeIncrement            = 20                                  {product}
    uintx TenuredGenerationSizeSupplement           = 80                                  {product}
    uintx TenuredGenerationSizeSupplementDecay      = 2                                   {product}
     intx ThreadPriorityPolicy                      = 0                                   {product}
     bool ThreadPriorityVerbose                     = false                               {product}
    uintx ThreadSafetyMargin                        = 52428800                            {product}
     intx ThreadStackSize                           = 0                                   {pd product}
    uintx ThresholdTolerance                        = 10                                  {product}
     intx Tier0BackedgeNotifyFreqLog                = 10                                  {product}
     intx Tier0InvokeNotifyFreqLog                  = 7                                   {product}
     intx Tier0ProfilingStartPercentage             = 200                                 {product}
     intx Tier23InlineeNotifyFreqLog                = 20                                  {product}
     intx Tier2BackEdgeThreshold                    = 0                                   {product}
     intx Tier2BackedgeNotifyFreqLog                = 14                                  {product}
     intx Tier2CompileThreshold                     = 0                                   {product}
     intx Tier2InvokeNotifyFreqLog                  = 11                                  {product}
     intx Tier3BackEdgeThreshold                    = 60000                               {product}
     intx Tier3BackedgeNotifyFreqLog                = 13                                  {product}
     intx Tier3CompileThreshold                     = 2000                                {product}
     intx Tier3DelayOff                             = 2                                   {product}
     intx Tier3DelayOn                              = 5                                   {product}
     intx Tier3InvocationThreshold                  = 200                                 {product}
     intx Tier3InvokeNotifyFreqLog                  = 10                                  {product}
     intx Tier3LoadFeedback                         = 5                                   {product}
     intx Tier3MinInvocationThreshold               = 100                                 {product}
     intx Tier4BackEdgeThreshold                    = 40000                               {product}
     intx Tier4CompileThreshold                     = 15000                               {product}
     intx Tier4InvocationThreshold                  = 5000                                {product}
     intx Tier4LoadFeedback                         = 3                                   {product}
     intx Tier4MinInvocationThreshold               = 600                                 {product}
     bool TieredCompilation                         = true                                {pd product}
     intx TieredCompileTaskTimeout                  = 50                                  {product}
     intx TieredRateUpdateMaxTime                   = 25                                  {product}
     intx TieredRateUpdateMinTime                   = 1                                   {product}
     intx TieredStopAtLevel                         = 4                                   {product}
     bool TimeLinearScan                            = false                               {C1 product}
     bool TraceBiasedLocking                        = false                               {product}
     bool TraceClassLoading                         = false                               {product rw}
     bool TraceClassLoadingPreorder                 = false                               {product}
     bool TraceClassPaths                           = false                               {product}
     bool TraceClassResolution                      = false                               {product}
     bool TraceClassUnloading                       = false                               {product rw}
     bool TraceDynamicGCThreads                     = false                               {product}
     bool TraceGen0Time                             = false                               {product}
     bool TraceGen1Time                             = false                               {product}
    ccstr TraceJVMTI                                =                                     {product}
     bool TraceLoaderConstraints                    = false                               {product rw}
     bool TraceMetadataHumongousAllocation          = false                               {product}
     bool TraceMonitorInflation                     = false                               {product}
     bool TraceParallelOldGCTasks                   = false                               {product}
     intx TraceRedefineClasses                      = 0                                   {product}
     bool TraceSafepointCleanupTime                 = false                               {product}
     bool TraceSuspendWaitFailures                  = false                               {product}
     intx TrackedInitializationLimit                = 50                                  {C2 product}
     bool TransmitErrorReport                       = false                               {product}
     bool TrapBasedNullChecks                       = false                               {pd product}
     bool TrapBasedRangeChecks                      = false                               {C2 pd product}
     intx TypeProfileArgsLimit                      = 2                                   {product}
    uintx TypeProfileLevel                          = 111                                 {pd product}
     intx TypeProfileMajorReceiverPercent           = 90                                  {C2 product}
     intx TypeProfileParmsLimit                     = 2                                   {product}
     intx TypeProfileWidth                          = 2                                   {product}
     intx UnguardOnExecutionViolation               = 0                                   {product}
     bool UnlinkSymbolsALot                         = false                               {product}
     bool Use486InstrsOnly                          = false                               {ARCH product}
     bool UseAES                                    = true                                {product}
     bool UseAESIntrinsics                          = true                                {product}
     intx UseAVX                                    = 2                                   {ARCH product}
     bool UseAdaptiveGCBoundary                     = false                               {product}
     bool UseAdaptiveGenerationSizePolicyAtMajorCollection  = true                                {product}
     bool UseAdaptiveGenerationSizePolicyAtMinorCollection  = true                                {product}
     bool UseAdaptiveNUMAChunkSizing                = true                                {product}
     bool UseAdaptiveSizeDecayMajorGCCost           = true                                {product}
     bool UseAdaptiveSizePolicy                     = true                                {product}
     bool UseAdaptiveSizePolicyFootprintGoal        = true                                {product}
     bool UseAdaptiveSizePolicyWithSystemGC         = false                               {product}
     bool UseAddressNop                             = true                                {ARCH product}
     bool UseAltSigs                                = false                               {product}
     bool UseAutoGCSelectPolicy                     = false                               {product}
     bool UseBMI1Instructions                       = true                                {ARCH product}
     bool UseBMI2Instructions                       = true                                {ARCH product}
     bool UseBiasedLocking                          = true                                {product}
     bool UseBimorphicInlining                      = true                                {C2 product}
     bool UseBoundThreads                           = true                                {product}
     bool UseCLMUL                                  = true                                {ARCH product}
     bool UseCMSBestFit                             = true                                {product}
     bool UseCMSCollectionPassing                   = true                                {product}
     bool UseCMSCompactAtFullCollection             = true                                {product}
     bool UseCMSInitiatingOccupancyOnly             = false                               {product}
     bool UseCRC32Intrinsics                        = true                                {product}
     bool UseCodeCacheFlushing                      = true                                {product}
     bool UseCompiler                               = true                                {product}
     bool UseCompilerSafepoints                     = true                                {product}
     bool UseCompressedClassPointers               := true                                {lp64_product}
     bool UseCompressedOops                        := true                                {lp64_product}
     bool UseConcMarkSweepGC                        = false                               {product}
     bool UseCondCardMark                           = false                               {C2 product}
     bool UseCountLeadingZerosInstruction           = true                                {ARCH product}
     bool UseCountTrailingZerosInstruction          = true                                {ARCH product}
     bool UseCountedLoopSafepoints                  = false                               {C2 product}
     bool UseCounterDecay                           = true                                {product}
     bool UseDivMod                                 = true                                {C2 product}
     bool UseDynamicNumberOfGCThreads               = false                               {product}
     bool UseFPUForSpilling                         = true                                {C2 product}
     bool UseFastAccessorMethods                    = false                               {product}
     bool UseFastEmptyMethods                       = false                               {product}
     bool UseFastJNIAccessors                       = true                                {product}
     bool UseFastStosb                              = true                                {ARCH product}
     bool UseG1GC                                   = false                               {product}
     bool UseGCLogFileRotation                      = false                               {product}
     bool UseGCOverheadLimit                        = true                                {product}
     bool UseGCTaskAffinity                         = false                               {product}
     bool UseHeavyMonitors                          = false                               {product}
     bool UseInlineCaches                           = true                                {product}
     bool UseInterpreter                            = true                                {product}
     bool UseJumpTables                             = true                                {C2 product}
     bool UseLWPSynchronization                     = true                                {product}
     bool UseLargePages                             = false                               {pd product}
     bool UseLargePagesInMetaspace                  = false                               {product}
     bool UseLargePagesIndividualAllocation        := false                               {pd product}
     bool UseLockedTracing                          = false                               {product}
     bool UseLoopCounter                            = true                                {product}
     bool UseLoopInvariantCodeMotion                = true                                {C1 product}
     bool UseLoopPredicate                          = true                                {C2 product}
     bool UseMathExactIntrinsics                    = true                                {C2 product}
     bool UseMaximumCompactionOnSystemGC            = true                                {product}
     bool UseMembar                                 = false                               {pd product}
     bool UseMontgomeryMultiplyIntrinsic            = true                                {C2 product}
     bool UseMontgomerySquareIntrinsic              = true                                {C2 product}
     bool UseMulAddIntrinsic                        = true                                {C2 product}
     bool UseMultiplyToLenIntrinsic                 = true                                {C2 product}
     bool UseNUMA                                   = false                               {product}
     bool UseNUMAInterleaving                       = false                               {product}
     bool UseNewLongLShift                          = false                               {ARCH product}
     bool UseOSErrorReporting                       = false                               {pd product}
     bool UseOldInlining                            = true                                {C2 product}
     bool UseOnStackReplacement                     = true                                {pd product}
     bool UseOnlyInlinedBimorphic                   = true                                {C2 product}
     bool UseOptoBiasInlining                       = true                                {C2 product}
     bool UsePSAdaptiveSurvivorSizePolicy           = true                                {product}
     bool UseParNewGC                               = false                               {product}
     bool UseParallelGC                            := true                                {product}
     bool UseParallelOldGC                          = true                                {product}
     bool UsePerfData                               = true                                {product}
     bool UsePopCountInstruction                    = true                                {product}
     bool UseRDPCForConstantTableBase               = false                               {C2 product}
     bool UseRTMDeopt                               = false                               {ARCH product}
     bool UseRTMLocking                             = false                               {ARCH product}
     bool UseSHA                                    = false                               {product}
     bool UseSHA1Intrinsics                         = false                               {product}
     bool UseSHA256Intrinsics                       = false                               {product}
     bool UseSHA512Intrinsics                       = false                               {product}
     intx UseSSE                                    = 4                                   {product}
     bool UseSSE42Intrinsics                        = true                                {product}
     bool UseSerialGC                               = false                               {product}
     bool UseSharedSpaces                           = false                               {product}
     bool UseShenandoahGC                           = false                               {product}
     bool UseSignalChaining                         = true                                {product}
     bool UseSquareToLenIntrinsic                   = true                                {C2 product}
     bool UseStoreImmI16                            = false                               {ARCH product}
     bool UseStringDeduplication                    = false                               {product}
     bool UseSuperWord                              = true                                {C2 product}
     bool UseTLAB                                   = true                                {pd product}
     bool UseThreadPriorities                       = true                                {pd product}
     bool UseTypeProfile                            = true                                {product}
     bool UseTypeSpeculation                        = true                                {C2 product}
     bool UseUTCFileTimestamp                       = true                                {product}
     bool UseUnalignedLoadStores                    = true                                {ARCH product}
     bool UseVMInterruptibleIO                      = false                               {product}
     bool UseXMMForArrayCopy                        = true                                {product}
     bool UseXmmI2D                                 = false                               {ARCH product}
     bool UseXmmI2F                                 = false                               {ARCH product}
     bool UseXmmLoadAndClearUpper                   = true                                {ARCH product}
     bool UseXmmRegToRegMoveAll                     = true                                {ARCH product}
     bool VMThreadHintNoPreempt                     = false                               {product}
     intx VMThreadPriority                          = -1                                  {product}
     intx VMThreadStackSize                         = 0                                   {pd product}
     intx ValueMapInitialSize                       = 11                                  {C1 product}
     intx ValueMapMaxLoopSize                       = 8                                   {C1 product}
     intx ValueSearchLimit                          = 1000                                {C2 product}
     bool VerifyMergedCPBytecodes                   = true                                {product}
     bool VerifySharedSpaces                        = false                               {product}
     intx WorkAroundNPTLTimedWaitHang               = 1                                   {product}
    uintx YoungGenerationSizeIncrement              = 20                                  {product}
    uintx YoungGenerationSizeSupplement             = 80                                  {product}
    uintx YoungGenerationSizeSupplementDecay        = 8                                   {product}
    uintx YoungPLABSize                             = 4096                                {product}
     bool ZeroTLAB                                  = false                               {product}
     intx hashCode                                  = 5                                   {product}
Connected to the target VM, address: '127.0.0.1:55760', transport: 'socket'
2019-12-26T17:05:53.205+0800: 0.806: [GC (Allocation Failure) [PSYoungGen: 8192K->1016K(9216K)] 8192K->1553K(19456K), 0.0016892 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2019-12-26T17:05:53.376+0800: 0.976: [GC (Allocation Failure) [PSYoungGen: 9208K->992K(9216K)] 9745K->2319K(19456K), 0.0014377 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2019-12-26T17:05:53.539+0800: 1.140: [GC (Allocation Failure) [PSYoungGen: 9184K->1000K(9216K)] 10511K->3082K(19456K), 0.0019212 secs] [Times: user=0.08 sys=0.00, real=0.00 secs] 
2019-12-26T17:05:53.593+0800: 1.193: [GC (Allocation Failure) --[PSYoungGen: 8826K->8826K(9216K)] 16028K->16318K(19456K), 0.0020696 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2019-12-26T17:05:53.595+0800: 1.196: [Full GC (Ergonomics) [PSYoungGen: 8826K->6137K(9216K)] [ParOldGen: 7491K->6470K(10240K)] 16318K->12607K(19456K), [Metaspace: 8221K->8221K(1056768K)], 0.0183229 secs] [Times: user=0.11 sys=0.00, real=0.02 secs] 

1.2.5、-Xloggc

日志位置 (-Xloggc:)

-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 
-verbose:gc 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCTimeStamps  
-Xloggc:D:\programFiles\java-1.8.0-openjdk\log\gc.log

1.2.6、开启一个远程支持访问的

参数 类型 描述
-Dcom.sun.management.jmxremote 布尔 默认为true
-Dcom.sun.management.jmxremote.port 数字 监听端口号,方便远程访问
-Dcom.sun.management.jmxremote.authenticate 布尔 是否需要开启用户认证,默认开启,指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
-Dcom.sun.management.jmxremote.ssl 布尔 是否对连接开启SSL加密,默认开启
-Dcom.sun.management.jmxremote.access.file 路径 配置用户权限文件路径,默认路径JRE_HOME/lib/management/jmxremote.access
-Dcom.sun.management.jmxremote. password.file 路径 用户名和密码,默认路径JRE_HOME/lib/management/ jmxremote.password

1.2.6.1、启动JVM监控,不配置用户名和密码

一般情况下,不用配置用户名和密码,防火墙可以指定某些ip才能访问

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=10200

-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

1577339440496

1.2.6.2、配置用户名和密码(一般没必要)

1、密码配置 :将以下信息保存到相应的文件里面,比如jmxremote.password,具体设置可参考 ${JAVA_HOME}/jre/lib/management/jmxremote.password.template

healerjean  123456
monitorRole 123456
controlRole 123456

2、用户权限分配 :将上面的信息保存到相应的文件里面,比如jmxremote.access。关于用户和权限的配置可以参见${JAVA_HOME}/jre/lib/management/jmxremote.access文件

healerjean  readwrite
monitorRole readonly
controlRole readwrite

3、参数配置

1、Linux权限配置

chmod 600 jmxremote.access

chmod 600 jmxremote.password

windos权限配置

右键单击文件 jmxremote.password,弹出菜单中选“属性”,再点“安全”/“高级”/“更改权限”/“包括可从该对象的父项继承的权限”(弹出窗口中选“删除”以删除所有访问权限);

再选“添加”/“高级”/“立即查找”,选中你的用户(如HealerJean),点“确定”; 权限项目窗口中勾选“完全控制”,点“确定”。

4、配置参数访问

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=10200
 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=D:\programFiles\java-1.8.0-openjdk\jre\lib\management\auth\jmxremote.password
-Dcom.sun.management.jmxremote.access.file=D:\programFiles\java-1.8.0-openjdk\jre\lib\management\auth\jmxremote.access

1.2.7、其他参数

1.2.7.1、Java堆区

参数 说明 默认值 用法
-Xms 堆区内存初始内存分配的大小 系统的1/64 通常为默认即可,但有可能真的按照这样的一个规则分配时,设计出的软件还没有能够运行得起来就挂了。所以仍需按照实际情况进行分配。
-Xmx 堆区内存可被分配的最大上限 系统的1/4 通常会将 -Xms -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。
-XX:newSize 新生代初始内存的大小   应该小于 -Xms的值;
-XX:MaxnewSize 新生代可被分配的内存的最大上限   应该小于 -Xmx的值;
-Xmn 年轻代大小   这个参数则是对 -XX:newSize-XX:MaxnewSize两个参数的同时配置 ,-XX:newSize = -XX:MaxnewSize = -Xmn((Sun官方建议年轻代的大小为整个堆的3/8左右))
-XX:SurvivorRatio 年轻代中Eden区与Survivor区的大小比值 一般设置为8 设置年轻代中Eden区与Survivor区的大小比值。-XX:SurvivorRatio=8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:NewRatio 设置年轻代与年老代的比值   -XX:NewRatio=4:。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5,一般不使用

1.2.7.2、栈区(每个线程的大小 )

操作系统分配给每个进程的内存是有限制的,虚拟机提供了参数来控制非堆区(MaxPermSize)和Java堆(Xmx)区这两部分的最大值

操作系统剩余的内存减去Xmx(最大堆区容量)MaxPermSize(最大方法区容量),,程序计数器内存消耗很小可以忽略掉,如果虚拟机进程本身消耗的内存不计算在内,剩下的就给了虚拟机栈和本地方法栈了。

每个线程分配到的栈容量越大,可以建立的线程数就越少,建立线程时就越容易将资源耗尽。

栈深度在大多数情况下达到1000到2000没有问题,对于正常的方法调用(包括递归),这个深度完全够用了,但是如果是建立多线程导致的内存溢出,在不能减少线程数,或者更换虚拟机的情况下,就只能通过减少最大堆(这样可以让栈区多一些)、减少线程分配的栈容量(如果当前线程占用的栈资源允许的情况下)

参数 说明 默认值 用法
-Xss 设置每个线程的栈大小 1M JDK5.0以后每个线程栈大小为1M,以前每个线程栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

1.2.7.3、持久代

持久代(非堆区,方法区)一般固定大小为64m

参数 说明 默认值 用法
-XX:PermSize 非堆区初始化内存大小    
-XX:MaxPermSize 非堆区最大的内存大小    

1.2.7.4、垃圾收集器选择

WX20180411-142826@2x

参数 收集器名称 收集算法 方式 收集对象 用法
-XX:+UseSerialGC Serial 复制 串行 新生代 虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。
-XX:+UseParNewGC ParNew 复制 并行 新生代 开启此参数使用ParNew & serial old搜集器
-XX:+UseParallelG parallel Scavenge 复制 并行 新生代 开启此参数使用·parallel scavenge & parallel old搜集器(server模式默认值)
  serial old 标记-整理 串行 老年代  
-XX:+UseParalledlOldGC Parallel Old 标记-整理 并行 老年代 打开此开关参数后,使用Parallel Scavenge+Parallel Old收集器组合进行垃圾收集。
-XX:+UseConcMarkSweepGC CMS 标记-清除 并发 老年代 打开此开关参数后,使用ParNew+CMS+Serial Old收集器组合进行垃圾收集。Serial Old作为CMS收集器出现Concurrent Mode Failure的备用垃圾收集器。

1.2.7.5、通用参数

参数 说明 默认值 用法
XX:MaxTenuringThreshold 垃圾最大年龄 15 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。 如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率
-XX:PretenureSizeThreshold 晋升年老代的对象大小 0:不管多大都是先在eden中分配内存 如设为10M,则超过10M的对象将不在eden区分配,而直接进入年老代。

1.2.7.6、并行收集器参数

参数 说明 默认值 用法
-XX:ParallelGCThreads 指定垃圾收集的线程数量 默认与CPU个数相等  
-XX:GCTimeRatio 置垃圾收集时间占总时间的比率   设置系统的吞吐量。比如设为99,则GC时间比为1/1+99=1%,也就是要求吞吐量为99%。垃圾收集所花费的时间是年轻一代和老年代收集的总时间;如果没有满足吞吐量目标,则增加新生代的内存大小以尽量增加用户程序运行的时间;
-XX:MaxGCPauseMillis 设置垃圾回收的最长时间   若无法满足设置值,则会优先缩小新生代大小,仍无法满足的话则会牺牲吞吐量。

1.2.7.7、并发收集器参数

参数 说明 默认值 用法
-XX:CMSInitiatingOccupancyFraction 设置CMS预留内存空间   触发CMS收集器的内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集。
-XX:UseCMSCompactAtFullCollection 是否在每一次CMS收集器清理垃圾后送一次内存整理。 true 目前默认就是true了,默认每次GC直接压缩
-XX:UseCMSCompactAtFullCollection 上一次CMS并发GC执行过后,到底还要再执行多少次full GC才会做压缩,从而触发一次内存整理    

2、JVM工具使用

名称 全称 主要作用
jps jvm process status tool 显示指定系统内所有的hotspot虚拟机进程
jstat jvm statistics monitoring tool 用于收集hotspot虚拟机各方面的运行数据
jinfo configuration info for java 实时查看和调整虚拟机的各项参数
jmap memory map for java 生成虚拟机的内存转储快照(heapdump文件)
jhat jvm heap dump browser 用于分析heapmap文件,它会建立一个http/html服务器让用户可以在浏览器上查看分析结果
jstack stack trace for java 显示虚拟机的线程快照,定位死循环,线程阻塞,死锁等问题

2.1、jps

jvm process status 虚拟机进程状态

命令 说明
jps - l 进程号、输出主类或者jar的完全路径名、
jps -v 输出jvm参数
jps -q 只显示进程号

2.1.1、jps -l

进程号、输出主类或者jar的完全路径名

package com.hlj.moudle.Jvm04_Command;
import java.util.Scanner;

public class Jvm04_01jps {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.nextLine();
    }
}

$ jps -l
14992 com.caucho.server.resin.Resin
16864 org.jetbrains.jps.cmdline.Launcher
15892 org.jetbrains.idea.maven.server.RemoteMavenServer
6916 org.jetbrains.jps.cmdline.Launcher
6980 sun.tools.jps.Jps
13688 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
14684 com.hlj.moudle.Jvm04_Command.Jvm04_01jps
5948

$ jps -l | grep Jvm
14684 com.hlj.moudle.Jvm04_Command.Jvm04_01jps

2.1.2、jps –v

输出jvm参数(查看已经运行的main的JVM参数)

-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 
package com.hlj.moudle.Jvm04_Command;
import java.util.Scanner;

public class Jvm04_01jps {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.nextLine();
    }
}
$ jps -v | grep Jvm04
18228 Jvm04_01jps -Dvisualvm.id=15978156520281 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -javaagent:D:\programFiles\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=52554:D:\programFiles\IntelliJ IDEA 2018.3.5\bin -Dfile.encoding=UTF-8

1、使用Linux命令查看进程以及参数配置

 ps -aux |grep scf-ma
[work@vm10-123-3-2 bin]$ ps -aux |grep scf-ma
work     12566  0.5  4.5 11541924 1483512 ?    Sl   Jan02  37:54 /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/bin/java -Xmn256M -Xmx1024M -Xms1024M -XX:MaxPermSize=256M -XX:PermSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=50 -XX:+UseCMSCompactAtFullCollection -XX:MaxTenuringThreshold=10 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintFlagsFinal -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8393 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xloggc:/usr/local/service/log/scf/scf-manager/gc.log -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19137 -Dlog4j2.isThreadContextMapInheritable=true -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djava.endorsed.dirs=/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/endorsed:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/endorsed -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58 -server com.caucho.server.resin.Resin --root-directory /usr/local/service/app/scf/scf-manager/resin-pro-4.0.58 -conf ./../conf/resin.xml -server scf-manager start

2.1.3、jps -q

值显示java进程号,什么都看不出来

package com.hlj.moudle.Jvm04_Command;
import java.util.Scanner;

public class Jvm04_01jps {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.nextLine();
    }
}
$ jps -q
14992
15892
18228
6916
13304
13688
13628
5948

2.2、jstat

JVM Statistics Monitoring Tool:虚拟机统计信息监控工具) :

用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者是远程虚拟机进程中的类加载,内存,垃圾收集,在没有GUI图形页面,踏实运行期定位虚拟机性能的首选工具

命令 说明
jstat -class 用于查看类加载情况的统计,显示加载class的数量,及所占空间等信息。
jstat -compiler JIT,查看HotSpot中即时编译器编译情况的统计
jstat -gc GC堆状态,查看JVM中堆的垃圾收集情况的统计,可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity 各区大小,查看新生代、老生代及持久代的存储容量情况,可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
jstat -gccause 最近一次GC统计和原因,查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因
jstat -gcnew 新区统计,查看新生代垃圾收集的情况,年轻代对象的信息
jstat -gcnewcapacity 年轻代内存统计
jstat -gcold 老年代垃圾回收统计,用于查看老生代及持久代发生GC的情况,老年代对象的信息
jstat -gcoldcapacity 老区大小,用于查看老生代的容量,old对象的信息及其占用量
jstat -gcpermcapacity 永久区大小,用于查看持久代的容量,perm对象的信息及其占用量
jstat -gcutil GC统计汇总,查看新生代、老生代及持代垃圾收集的情况
jstat -printcompilation HotSpot编译统计,当前VM执行的信息

2.2.1、jstat -class pid

查看类加载情况的统计

[work@vm10-123-3-2 bin]$ ./jstat -class 12566
Loaded  Bytes  Unloaded  Bytes     Time   
 17604 34620.3        0     0.0      20.28
参数 说明
Loaded 加载class的数量
Bytes 所占用空间大小
Unloaded 未加载数量
Bytes 未加载占用空间
Time 时间

2.2.2、jstat -gc pid time num

实时监控GC容量

举例:每3秒收集一次进程为12566 的垃圾收集状况,一共查询100次

[work@vm10-123-3-2 bin]$ ./jstat -gc 12566 3000 100
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
26176.0 26176.0  0.0   1859.9 209792.0 159325.8  786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 34511.3   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 34513.3   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36273.8   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36273.8   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36273.8   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36273.8   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36275.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36275.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36288.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36288.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36288.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093
26176.0 26176.0  0.0   1859.9 209792.0 36288.9   786432.0   168717.4  116168.0 110226.9 13108.0 12151.5    283    6.863   5      0.230    7.093

1578378375256

参数 说明(单位是KB)
S0C、S1C、S0U、S1U Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU Eden区容量和使用量
OC、OU 年老代容量和使用量
MC 元空间commited容量,commited,并不是capacity
MU 元空间used的容量
CCSC 压缩类空间class space 中 commited容量, commited,并不是capacity
CCSU 压缩类空间class space 中 used容量
YGC、YGCT 年轻代GC次数和GC耗时
FGC、FGCT Full GC次数和Full GC耗时
GCT GC总耗时

2.2.3、jstat -gcutil pid time num

实时监控GC百分比

举例:每3秒收集一次进程为12566 的垃圾收集状况,一共查询100次

[work@vm10-123-3-2 bin]$ ./jstat -gcutil 12566 3000 100
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.31  21.45  94.89  92.70    283    6.863     5    0.230    7.093
  0.00   7.11  66.32  21.45  94.89  92.70    283    6.863     5    0.230    7.093

1578378744168

参数 说明
S0 S1 Survivor 0/1 占用百分比
E Eden 所占百分比
O 老年代 所占百分比
M 元数据区已使用的占当前容量百分比,MC/MU计算出来的
CCS 压缩类空间使用的占当前容量百分比,NoKlass Metaspace的使用率,也就是CCSU/CCSC算出来的
YGC 年轻代GC次数
YGCT 年轻代GC时间
FGC 老年代GC次数
FGCT 老年代GC时间
GCT GC总耗时

2.2.4、jstat -gcnewcapacity pid:

年轻代内存统计

[work@vm10-123-3-2 bin]$ ./jstat -gcnewcapacity 12566
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC 
  262144.0   262144.0   262144.0  26176.0  26176.0  26176.0  26176.0   209792.0   209792.0   284     5

1578381601165

参数 说明
NGCMN、NGCMX 年轻代最小容量、最大容量
NGC 当前年轻代容量
S0CMX、S1CMX Survivor0/1 最大容量
S0C、S1C 当前Survivor0/1 容量
ECMX Eden最大容量
EC 当前Eden容量
YGC 年轻代gc次数
FGC 老年代gc次数

2.2.5 、jstat -gcnew pid

年轻代垃圾回收统计

[work@vm10-123-3-2 bin]$ ./jstat -gcnew 12566
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
26176.0 26176.0    0.0 1859.9 10  10 13088.0 209792.0 209614.9    283    6.863
参数 说明
S0C、S1C Survivor 0/1 容量大小
S0U、S1U Survivor 0/1 使用量大小
TT 对象在年轻代存活的次数
MTT 对象在新生代存活的最大次数
DSS 当前期望的Survivor大小(伊甸园区已满)
EC、EU Eden 容量和使用量大小
YGC 年轻代gc次数
YGCT 年轻代gc时消耗时间

2.2.6、jstat -gcoldcapacity pid

老年代内存统计

[work@vm10-123-3-2 bin]$ ./jstat -gcoldcapacity 12566   
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   
   786432.0    786432.0    786432.0    786432.0   284     5    0.230    7.117
参数 说明
OGCMN、OGCMX 老年代最小容量、最大容量
OGC 老年代当前容量
OC 老年代当前容量
YGC 年轻代gc次数
FGC 老年代gc次数
FGCT 老年代gc时消耗时间
GCT gc消耗总时间

2.2.7、jstat -gcold pid

老年代垃圾回收统计

[work@vm10-123-3-2 bin]$ ./jstat -gcold 12566        
   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT   
116168.0 110279.2  13108.0  12151.5    786432.0    168717.5    284     5    0.230    7.117
参数 说明
MC 元空间commited容量,是commited,并不是capacity
MU 元空间used的容量
CCSC 压缩类空间class space 中 commited容量, 是commited,并不是capacity**
CCSU 压缩类空间class space 中 used容量
OC、OU 老年代容量、老年代使用容量
YGC 年轻代gc次数
FGC 老年代gc次数
FGCT 老年代gc时消耗时间
GCT gc消耗总时间

2.2.8、jstat -gcmetacapacity pid

元数据内存统计

[work@vm10-123-3-2 bin]$ ./jstat -gcmetacapacity 12566
   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT   
       0.0  1153024.0   116168.0        0.0  1048576.0    13108.0   284     5    0.230    7.117
参数 说明
MCMN 最小元数据容量(0)
MCMX 最大元数据容量:元空间 reserved值
MC 元空间commited容量,是commited,并不是capacity
CCSM、 最小压缩类空间容量(0)
CCSMX 最大压缩类空间容量(压缩类空间class space 中 reserved的内存大小)
CCSC 压缩类空间class space 中 commited容量, 是commited,并不是capacity
YGC 年轻代gc次数
FGC 老年代gc次数
FGCT 老年代gc时消耗时间
GCT gc消耗总时间

2.3、jstack pid

显示虚拟机的线程快照,定位死循环、线程阻塞、死锁等问题

$ jstack 21048

2.3.1、死循环

public class Jvm04_01jps {

    public static void main(String[] args) throws InterruptedException {
       method();
    }

    public static void method(){
        while (true) {

        }
    }
}

1578384566064

2.3.2、object.wait()

class TestTask implements Runnable {
    @Override
    public void run() {

        synchronized (this) {
            try {
                //等待被唤醒
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

public class Test {

    public static void main(String[] args) throws InterruptedException {

        ExecutorService ex = Executors.newFixedThreadPool(1);
        ex.execute(new TestTask());

    }
}

1578384656158

2.3.3、死锁

class TestTask implements Runnable {
    private Object obj1;
    private Object obj2;
    private int order;

    public TestTask(int order, Object obj1, Object obj2) {
        this.order = order;
        this.obj1 = obj1;
        this.obj2 = obj2;
    }

    public void test1() throws InterruptedException {
        synchronized (obj1) {
            //建议线程调取器切换到其它线程运行
            Thread.yield();
            synchronized (obj2) {
                System.out.println("test。。。");
            }

        }
    }
    public void test2() throws InterruptedException {
        synchronized (obj2) {
            Thread.yield();
            synchronized (obj1) {
                System.out.println("test。。。");
            }

        }
    }

    @Override
    public void run() {

        while (true) {
            try {
                if(this.order == 1){
                    this.test1();
                }else{
                    this.test2();
                }
                
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

public class Test {

    public static void main(String[] args) throws InterruptedException {
        Object obj1 = new Object();
        Object obj2 = new Object();

        ExecutorService ex = Executors.newFixedThreadPool(10);
        // 起10个线程
        for (int i = 0; i < 10; i++) {
            int order = i%2==0 ? 1 : 0;
            ex.execute(new TestTask(order, obj1, obj2));
        }

    }
}

1578384692827

2.4、jinfo

实时查看Java系统和调整JVM的各项参数 可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。

2.4.1、jinfo pid

输出当前 jvm 进程的全部参数和系统属性

[work@vm10-123-3-2 bin]$ ./jinfo 12566
Attaching to process ID 12566, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Java System Properties:

com.sun.management.jmxremote.authenticate = false
java.runtime.name = OpenJDK Runtime Environment
java.vm.version = 25.202-b08
sun.boot.library.path = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/amd64
javax.management.builder.initial = com.caucho.jmx.MBeanServerBuilderImpl
java.vendor.url = https://adoptopenjdk.net/
java.vm.vendor = Oracle Corporation
path.separator = :
java.rmi.server.randomIDs = true
file.encoding.pkg = sun.io
java.vm.name = OpenJDK 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = US
user.dir = /usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/bin
java.vm.specification.name = Java Virtual Machine Specification
com.sun.management.jmxremote.port = 8393
java.runtime.version = 1.8.0_202-b08
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/endorsed:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/endorsed
line.separator = 

java.io.tmpdir = /tmp
java.vm.specification.vendor = Oracle Corporation
java.util.logging.manager = com.caucho.log.LogManagerImpl
java.naming.factory.url.pkgs = com.caucho.naming
os.name = Linux
resin.home = /usr/local/service/app/scf/scf-manager/resin-pro-4.0.58
sun.jnu.encoding = UTF-8
java.system.class.loader = com.caucho.loader.SystemClassLoader
java.library.path = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/amd64/server:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/amd64:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/../lib/amd64:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/libexec64:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/amd64/server:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/amd64:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 3.10.0-514.26.2.el7.x86_64
user.home = /home/work
user.timezone = 
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = work
java.class.path = /usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/resin.jar:.:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/lib/tools.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/lib/rt.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/eclipselink-2.4.0.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/javax.faces-2.1.24.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/webservices-extra-api.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/javamail-141.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/webutil.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/javaee-16.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/resin.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/pro.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/resin-eclipselink.jar:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/lib/activation.jar
java.naming.factory.initial = com.caucho.naming.InitialContextFactoryImpl
com.sun.management.jmxremote = 
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = com.caucho.server.resin.Resin --root-directory /usr/local/service/app/scf/scf-manager/resin-pro-4.0.58 -conf ./../conf/resin.xml -server scf-manager start
java.home = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre
user.language = en
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.X11.XToolkit
com.sun.management.jmxremote.ssl = false
java.vm.info = mixed mode
java.version = 1.8.0_202
java.ext.dirs = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/resources.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/rt.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/sunrsasign.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/jsse.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/jce.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/charsets.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/jfr.jar:/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/classes
java.awt.headless = true
java.vendor = AdoptOpenJdk
file.separator = /
java.vendor.url.bug = https://github.com/AdoptOpenJDK/openjdk-build/issues
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
log4j2.isThreadContextMapInheritable = true
sun.cpu.isalist = 

VM Flags:
Non-default VM flags: -XX:CICompilerCount=12 -XX:CMSFullGCsBeforeCompaction=50 -XX:InitialHeapSize=1073741824 -XX:+ManagementServer -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=268435456 -XX:MaxTenuringThreshold=10 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=268435456 -XX:OldPLABSize=16 -XX:OldSize=805306368 -XX:+PrintFlagsFinal -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCMSCompactAtFullCollection -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 
Command line:  -Xmn256M -Xmx1024M -Xms1024M -XX:MaxPermSize=256M -XX:PermSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=50 -XX:+UseCMSCompactAtFullCollection -XX:MaxTenuringThreshold=10 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintFlagsFinal -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8393 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xloggc:/usr/local/service/log/scf/scf-manager/gc.log -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19137 -Dlog4j2.isThreadContextMapInheritable=true -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djava.endorsed.dirs=/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/endorsed:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/endorsed -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58

2.4.2、jinfo -flag pid

开启/关闭、设置对应名称的参数、显示Jvm参数值包括默认值

使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。

2.4.2.1、jinfo -flags pid

打印所有JVM参数(包括默认值 )

[work@vm10-123-3-2 bin]$ ./jinfo  -flags  12566
Attaching to process ID 12566, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Non-default VM flags: 
-XX:CICompilerCount=12 
-XX:CMSFullGCsBeforeCompaction=50 
-XX:InitialHeapSize=1073741824 
-XX:+ManagementServer 
-XX:MaxHeapSize=1073741824 
-XX:MaxNewSize=268435456 
-XX:MaxTenuringThreshold=10 
-XX:MinHeapDeltaBytes=196608 
-XX:NewSize=268435456 
-XX:OldPLABSize=16 
-XX:OldSize=805306368 
-XX:+PrintFlagsFinal 
-XX:+PrintGC 
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:SurvivorRatio=8 
-XX:+UseCMSCompactAtFullCollection 
-XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
Command line:  -Xmn256M -Xmx1024M -Xms1024M -XX:MaxPermSize=256M -XX:PermSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=50 -XX:+UseCMSCompactAtFullCollection -XX:MaxTenuringThreshold=10 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintFlagsFinal -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8393 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xloggc:/usr/local/service/log/scf/scf-manager/gc.log -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19137 -Dlog4j2.isThreadContextMapInheritable=true -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djava.endorsed.dirs=/usr/local/service/app/scf/scf-manager/jdk1.8.0_202/jre/lib/endorsed:/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58/endorsed -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/service/app/scf/scf-manager/resin-pro-4.0.58
[work@vm10-123-3-2 bin]$ 

2.4.2.2、显示指定的Jvm参数值(包括默认值)。

$ jinfo -flag MaxTenuringThreshold 21048
-XX:MaxTenuringThreshold=15


$ jinfo -flag PrintGCDetails  21048
-XX:-PrintGCDetails

java -XX:+PrintFlagsFinal -version | grep MetaspaceSiz

2.4.2.3、指定参数的值

jinfo -flag MaxTenuringThreshold=10 21048

2.4.2.4、开启或者关闭日志

jinfo -flag +PrintGC 21048
jinfo -flag +PrintGCDetails 21048


jinfo -flag -PrintGC 21048
jinfo -flag -PrintGCDetails 21048

2.5、jmap

生成虚拟机的堆转储快照(heapdump文件)

命令 说明
jmap -heap 显示java堆详细信息,如使用哪种收集器、参数配置、分代情况等,在Linux/Solaris平台下有效
jmap -histo 显示堆对象简单的统计报表
jmap -dump 打印整个堆快照

2.5.1、jmap -heap pid

显示Java堆详细信息

Attaching to process ID 3764, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11

using thread-local object allocation.
Parallel GC with 8 thread(s) //采用Parallel GC 

Heap Configuration:
   MinHeapFreeRatio         = 0    //JVM最小空闲比率 可由-XX:MinHeapFreeRatio=<n>参数设置, jvm heap 在使用率小于 n 时 ,heap 进行收缩
   MaxHeapFreeRatio         = 100  //JVM最大空闲比率 可由-XX:MaxHeapFreeRatio=<n>参数设置, jvm heap 在使用率大于 n 时 ,heap 进行扩张 
   MaxHeapSize              = 2095054848 (1998.0MB) //JVM堆的最大大小 可由-XX:MaxHeapSize=<n>参数设置
   NewSize                  = 44040192 (42.0MB) //JVM新生代的默认大小 可由-XX:NewSize=<n>参数设置
   MaxNewSize               = 698351616 (666.0MB) //JVM新生代的最大大小 可由-XX:MaxNewSize=<n>参数设置
   OldSize                  = 88080384 (84.0MB) //JVM老生代的默认大小 可由-XX:OldSize=<n>参数设置 
   NewRatio                 = 2 //新生代:老生代(的大小)=1:2 可由-XX:NewRatio=<n>参数指定New Generation与Old Generation heap size的比例。
   SurvivorRatio            = 8 //survivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域] 可由-XX:SurvivorRatio=<n>参数设置
   MetaspaceSize            = 21807104 (20.796875MB) //元空间的默认大小,超过此值就会触发Full GC 可由-XX:MetaspaceSize=<n>参数设置
   CompressedClassSpaceSize = 1073741824 (1024.0MB) //类指针压缩空间的默认大小 可由-XX:CompressedClassSpaceSize=<n>参数设置
   MaxMetaspaceSize         = 17592186044415 MB //元空间的最大大小 可由-XX:MaxMetaspaceSize=<n>参数设置
   G1HeapRegionSize         = 0 (0.0MB) //使用G1垃圾收集器的时候,堆被分割的大小 可由-XX:G1HeapRegionSize=<n>参数设置

Heap Usage:
PS Young Generation //新生代区域分配情况
Eden Space: //Eden区域分配情况
   capacity = 89653248 (85.5MB)
   used     = 8946488 (8.532035827636719MB)
   free     = 80706760 (76.96796417236328MB)
   9.978989272089729% used
From Space: //其中一个Survivor区域分配情况
   capacity = 42467328 (40.5MB)
   used     = 15497496 (14.779563903808594MB)
   free     = 26969832 (25.720436096191406MB)
   36.49275037977431% used
To Space:  //另一个Survivor区域分配情况
   capacity = 42991616 (41.0MB)
   used     = 0 (0.0MB)
   free     = 42991616 (41.0MB)
   0.0% used
PS Old Generation //老生代区域分配情况
   capacity = 154664960 (147.5MB)
   used     = 98556712 (93.99100494384766MB)
   free     = 56108248 (53.508995056152344MB)
   63.722715216167906% used

1819 interned Strings occupying 163384 bytes.

2.5.2、 jmap -histo pid:

显示堆对象简单的统计报表,

jmap -histo pid

jmap -histo:live pid :只统计活的,使用live,JVM会先触发fullgc,然后再统计信息。所以如果不是很有必要的话,不要去执行

jmap -histo:live pid>a.log 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

然而这个只知道哪些对象有多少个,占用了多大的内存,但不知道由什么对象创建的。下一步需要使用命令jmap -dump将快照打印出来出来,使用内存分析工具进一步明确它是由谁引用的、由什么对象。

符号 说明
B byte
C char
D double
F float
I int
J long
Z boolean
[ [ 代表数组, [I 就相当于 int[]
[L+ 类名表示 对象用 [L+ 类名表示
instances(实例数)、bytes(大小)、classs name(类名)。它基本是按照使用使用大小逆序排列的。   
$ jmap -histo:live 21048

 num     #instances         #bytes  class name
----------------------------------------------
   1:          4915         554288  [C
   2:           679         262448  [B
   3:          4767         114408  java.lang.String
   4:           681          77752  java.lang.Class
   5:           681          46520  [Ljava.lang.Object;
   6:           791          31640  java.util.TreeMap$Entry
   7:           419          13408  java.util.HashMap$Node
   8:           203          12992  java.net.URL
   9:           262          12272  [Ljava.lang.String;
  10:           290          11600  java.lang.ref.Finalizer
  11:           133           7688  [I
  12:           166           6640  java.util.LinkedHashMap$Entry
  13:            67           6432  java.util.jar.JarFile$JarFileEntry
  14:            75           6000  [Ljava.util.WeakHashMap$Entry;
  15:            99           5544  sun.misc.URLClassPath$JarLoader
  16:            21           5328  [Ljava.util.HashMap$Node;
  17:            72           4608  java.util.jar.JarFile
  18:           109           4360  java.lang.ref.SoftReference
  19:            74           4144  sun.nio.cs.UTF_8$Encoder
  20:           256           4096  java.lang.Integer
  21:            72           4032  java.util.zip.ZipFile$ZipFileInputStream
  22:           166           3984  java.io.ExpiringCache$Entry
  23:           123           3936  java.util.Hashtable$Entry
  24:            66           3696  java.util.zip.ZipFile$ZipFileInflaterInputStream
  25:            75           3600  java.util.WeakHashMap
  26:           104           3328  java.util.concurrent.ConcurrentHashMap$Node
  27:            66           3168  java.util.zip.Inflater
  28:             8           3008  java.lang.Thread
  29:            69           2760  sun.nio.cs.UTF_8$Decoder
  30:            82           2624  java.lang.ref.ReferenceQueue
  31:            72           2304  java.util.zip.ZipCoder
  32:            26           2080  java.lang.reflect.Constructor
  33:            15           1968  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  34:            39           1872  sun.util.locale.LocaleObjectCache$CacheEntry
  35:            72           1728  java.util.ArrayDeque
  36:            66           1584  java.util.zip.ZStreamRef
  37:             1           1568  [[B
  38:            37           1480  java.io.ObjectStreamField
  39:            87           1392  java.lang.Object
  40:            29           1392  java.util.HashMap
  41:            84           1344  java.lang.ref.ReferenceQueue$Lock
  42:            19           1216  java.util.concurrent.ConcurrentHashMap
  43:             9           1184  [Ljava.util.Hashtable$Entry;
  44:             2           1064  [Ljava.lang.invoke.MethodHandle;
  45:             1           1040  [Ljava.lang.Integer;
  46:             1           1040  [[C
  47:            19            760  sun.util.locale.BaseLocale$Key
  48:             8            640  [S
  49:            19            608  java.util.Locale
  50:            19            608  sun.util.locale.BaseLocale
  51:            18            576  java.io.File
  52:            13            520  java.security.AccessControlContext
  53:            19            456  java.util.Locale$LocaleKey
  54:            17            408  java.util.jar.Attributes$Name
  55:            13            392  [Ljava.io.ObjectStreamField;
  56:             1            384  com.intellij.rt.execution.application.AppMainV2$1
  57:             1            384  java.lang.ref.Finalizer$FinalizerThread
  58:             6            384  java.nio.DirectByteBuffer
  59:            16            384  sun.misc.MetaIndex
  60:             1            376  java.lang.ref.Reference$ReferenceHandler
  61:             9            360  java.io.FileDescriptor
  62:             6            336  java.nio.DirectLongBufferU
  63:            14            336  java.util.LinkedList$Node
  64:            10            320  java.lang.OutOfMemoryError
  65:             3            312  [D
  66:            13            312  sun.reflect.NativeConstructorAccessorImpl
  67:             2            296  [J
  68:            15            280  [Ljava.lang.Class;
  69:             5            280  sun.util.calendar.ZoneInfo
  70:            11            264  java.util.ArrayList
  71:             8            256  java.util.LinkedList
  72:             8            256  java.util.Vector
  73:             3            240  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
  74:             5            240  java.util.Hashtable
  75:             6            240  java.util.WeakHashMap$Entry
  76:            13            208  sun.reflect.DelegatingConstructorAccessorImpl
  77:             5            200  java.security.ProtectionDomain
  78:             6            192  java.io.FileInputStream
  79:             6            192  java.lang.ThreadLocal$ThreadLocalMap$Entry
  80:             4            192  java.util.Properties
  81:             4            192  java.util.TreeMap
  82:             2            160  [[Ljava.lang.String;
  83:             4            160  java.lang.ClassLoader$NativeLibrary
  84:             5            160  java.security.CodeSource
  85:             5            160  sun.util.locale.provider.LocaleProviderAdapter$Type
  86:             3            144  java.nio.HeapByteBuffer
  87:             6            144  sun.misc.PerfCounter
  88:             3            144  sun.misc.URLClassPath
  89:             2            128  java.io.ExpiringCache$1
  90:             4            128  java.util.Stack
  91:             1            120  java.net.SocksSocketImpl
  92:             5            120  java.util.Collections$UnmodifiableRandomAccessList
  93:             5            120  sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
  94:             2            112  java.lang.Package
  95:             2            112  java.util.LinkedHashMap
  96:             2            112  java.util.ResourceBundle$CacheKey
  97:             4             96  java.lang.RuntimePermission
  98:             2             96  java.lang.ThreadGroup
  99:             3             96  java.lang.ref.WeakReference
 100:             2             96  java.util.ResourceBundle$BundleReference
 101:             1             96  sun.misc.Launcher$AppClassLoader
 102:             3             96  sun.net.spi.DefaultProxySelector$NonProxyInfo
 103:             2             96  sun.nio.cs.StreamEncoder
 104:             1             88  java.net.DualStackPlainSocketImpl
 105:             1             88  sun.misc.Launcher$ExtClassLoader
 106:             5             80  [Ljava.security.Principal;
 107:             2             80  java.io.BufferedWriter
 108:             2             80  java.io.ExpiringCache
 109:             5             80  java.lang.ThreadLocal
 110:             5             80  java.security.ProtectionDomain$Key
 111:             2             80  sun.misc.FloatingDecimal$BinaryToASCIIBuffer
 112:             3             72  java.lang.ThreadLocal$ThreadLocalMap
 113:             3             72  java.net.Proxy$Type
 114:             3             72  java.util.Arrays$ArrayList
 115:             3             72  java.util.Collections$SynchronizedSet
 116:             1             72  java.util.ResourceBundle$RBClassLoader
 117:             3             72  java.util.concurrent.atomic.AtomicLong
 118:             3             72  sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
 119:             1             72  sun.util.locale.provider.JRELocaleProviderAdapter
 120:             1             64  [F
 121:             2             64  [Ljava.lang.Thread;
 122:             2             64  java.io.FileOutputStream
 123:             2             64  java.io.FilePermission
 124:             2             64  java.io.PrintStream
 125:             2             64  java.lang.ClassValue$Entry
 126:             2             64  java.lang.VirtualMachineError
 127:             2             64  java.lang.ref.ReferenceQueue$Null
 128:             2             64  java.security.BasicPermissionCollection
 129:             2             64  java.security.Permissions
 130:             4             64  java.util.HashSet
 131:             2             64  java.util.ResourceBundle$LoaderReference
 132:             2             48  java.io.BufferedOutputStream
 133:             1             48  java.io.BufferedReader
 134:             2             48  java.io.File$PathStatus
 135:             2             48  java.io.FilePermissionCollection
 136:             2             48  java.io.OutputStreamWriter
 137:             2             48  java.net.InetAddress$Cache
 138:             2             48  java.net.InetAddress$Cache$Type
 139:             1             48  java.net.SocketInputStream
 140:             1             48  java.nio.HeapCharBuffer
 141:             2             48  java.nio.charset.CoderResult
 142:             3             48  java.nio.charset.CodingErrorAction
 143:             2             48  sun.misc.NativeSignalHandler
 144:             2             48  sun.misc.Signal
 145:             2             48  sun.misc.URLClassPath$FileLoader
 146:             3             48  sun.net.www.protocol.jar.Handler
 147:             1             48  sun.nio.cs.StreamDecoder
 148:             1             48  sun.nio.cs.US_ASCII$Decoder
 149:             1             48  sun.util.locale.provider.LocaleResources$ResourceReference
 150:             1             40  [Lsun.util.locale.provider.LocaleProviderAdapter$Type;
 151:             1             40  java.io.BufferedInputStream
 152:             1             40  java.util.ResourceBundle$1
 153:             1             40  sun.nio.cs.StandardCharsets$Aliases
 154:             1             40  sun.nio.cs.StandardCharsets$Cache
 155:             1             40  sun.nio.cs.StandardCharsets$Classes
 156:             1             40  sun.nio.cs.ext.ExtendedCharsets
 157:             1             32  [Ljava.lang.OutOfMemoryError;
 158:             2             32  [Ljava.lang.StackTraceElement;
 159:             1             32  [Ljava.lang.ThreadGroup;
 160:             1             32  [Ljava.net.Proxy$Type;
 161:             1             32  java.io.WinNTFileSystem
 162:             1             32  java.lang.ArithmeticException
 163:             2             32  java.lang.Boolean
 164:             1             32  java.lang.NullPointerException
 165:             1             32  java.net.InetAddress$InetAddressHolder
 166:             1             32  java.net.Socket
 167:             2             32  java.nio.ByteOrder
 168:             2             32  java.util.concurrent.atomic.AtomicInteger
 169:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 170:             1             32  sun.instrument.InstrumentationImpl
 171:             1             32  sun.nio.cs.StandardCharsets
 172:             1             32  sun.util.locale.provider.LocaleResources
 173:             1             32  sun.util.locale.provider.LocaleServiceProviderPool
 174:             1             24  [Ljava.io.File$PathStatus;
 175:             1             24  [Ljava.lang.ClassValue$Entry;
 176:             1             24  [Ljava.net.InetAddress$Cache$Type;
 177:             1             24  [Ljava.security.ProtectionDomain;
 178:             1             24  [Lsun.launcher.LauncherHelper;
 179:             1             24  java.io.InputStreamReader
 180:             1             24  java.lang.ClassValue$Version
 181:             1             24  java.lang.StringBuilder
 182:             1             24  java.lang.invoke.MethodHandleImpl$4
 183:             1             24  java.lang.reflect.ReflectPermission
 184:             1             24  java.net.Inet4Address
 185:             1             24  java.net.Inet6AddressImpl
 186:             1             24  java.net.Proxy
 187:             1             24  java.util.BitSet
 188:             1             24  java.util.Collections$EmptyMap
 189:             1             24  java.util.Collections$SetFromMap
 190:             1             24  java.util.Locale$Cache
 191:             1             24  java.util.ResourceBundle$Control$CandidateListCache
 192:             1             24  sun.instrument.TransformerManager
 193:             1             24  sun.launcher.LauncherHelper
 194:             1             24  sun.misc.JarIndex
 195:             1             24  sun.nio.cs.ISO_8859_1
 196:             1             24  sun.nio.cs.ThreadLocalCoders$1
 197:             1             24  sun.nio.cs.ThreadLocalCoders$2
 198:             1             24  sun.nio.cs.US_ASCII
 199:             1             24  sun.nio.cs.UTF_16
 200:             1             24  sun.nio.cs.UTF_16BE
 201:             1             24  sun.nio.cs.UTF_16LE
 202:             1             24  sun.nio.cs.UTF_8
 203:             1             24  sun.util.locale.BaseLocale$Cache
 204:             1             24  sun.util.locale.provider.TimeZoneNameProviderImpl
 205:             1             16  [Ljava.lang.Throwable;
 206:             1             16  [Ljava.security.cert.Certificate;
 207:             1             16  [Lsun.instrument.TransformerManager$TransformerInfo;
 208:             1             16  java.io.FileDescriptor$1
 209:             1             16  java.lang.CharacterDataLatin1
 210:             1             16  java.lang.ClassValue$Identity
 211:             1             16  java.lang.Runtime
 212:             1             16  java.lang.String$CaseInsensitiveComparator
 213:             1             16  java.lang.System$2
 214:             1             16  java.lang.Terminator$1
 215:             1             16  java.lang.invoke.MemberName$Factory
 216:             1             16  java.lang.invoke.MethodHandleImpl$2
 217:             1             16  java.lang.invoke.MethodHandleImpl$3
 218:             1             16  java.lang.ref.Reference$1
 219:             1             16  java.lang.ref.Reference$Lock
 220:             1             16  java.lang.reflect.ReflectAccess
 221:             1             16  java.net.InetAddress$2
 222:             1             16  java.net.URLClassLoader$7
 223:             1             16  java.nio.Bits$1
 224:             1             16  java.nio.charset.CoderResult$1
 225:             1             16  java.nio.charset.CoderResult$2
 226:             1             16  java.security.ProtectionDomain$2
 227:             1             16  java.security.ProtectionDomain$JavaSecurityAccessImpl
 228:             1             16  java.util.Collections$EmptyIterator
 229:             1             16  java.util.Collections$EmptyList
 230:             1             16  java.util.Collections$EmptySet
 231:             1             16  java.util.Hashtable$EntrySet
 232:             1             16  java.util.ResourceBundle$Control
 233:             1             16  java.util.WeakHashMap$KeySet
 234:             1             16  java.util.jar.JavaUtilJarAccessImpl
 235:             1             16  java.util.zip.ZipFile$1
 236:             1             16  sun.misc.ASCIICaseInsensitiveComparator
 237:             1             16  sun.misc.FloatingDecimal$1
 238:             1             16  sun.misc.Launcher
 239:             1             16  sun.misc.Launcher$Factory
 240:             1             16  sun.misc.Perf
 241:             1             16  sun.misc.Unsafe
 242:             1             16  sun.net.spi.DefaultProxySelector
 243:             1             16  sun.net.www.protocol.file.Handler
 244:             1             16  sun.reflect.ReflectionFactory
 245:             1             16  sun.util.calendar.Gregorian
 246:             1             16  sun.util.locale.provider.AuxLocaleProviderAdapter$NullProvider
 247:             1             16  sun.util.locale.provider.SPILocaleProviderAdapter
 248:             1             16  sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter
 249:             1             16  sun.util.resources.LocaleData
 250:             1             16  sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total         16750        1270808


2.5.3、jmap -dump ,format = b file = heap.tdump pid

打印整个堆快照,这个命令执行,JVM会将整个heap的信息dump写入到一个文件,

heap如果比较大的话,就会导致这个过程比较耗时。执行的过程中为了保证dump的信息是可靠的,所以会暂停应用(STW),进行FULL GC。所以建议如果不是很有必要的话,不要去执行。

format = b 是表打印二进制文件,

-live, 此事只统计活的对象数量.

jmap -dump ,format = b file = heap.tdump pid

jmap -dump:live,format=b,file=heap.tdump 

2.5.3.1、打印堆快照的其他方式

虚拟机启动时如果指定了 -XX:+HeapDumpOnOutOfMemoryError 选项, 则在抛出 OutOfMemoryError 时, 会自动执行堆转储

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path

2.5.3.2、jhat 工具分析

这个文件使用工具进行分析,这个非常关键,具体分析,看后面的内容

$ jmap -dump:format=b,file=333.tdump 12316
Dumping heap to D:\programFiles\java-1.8.0-openjdk\bin\333.tdump ...
Heap dump file created

1578451779900

2.6、jhat

浏览器分析dump文件

2.6.1、jhat -J-Xmx1024m D:/javaDump.tdump

浏览器分析dump文件,说明: -J是向java虚拟机传一个参数,如-Xmx768m是指定虚拟机可用最大的内存为768M。如果映像文件很大,你要指定一个很大的值,否则在分析过程中就会有OutOfMemeryError的错误。

1、jhat是一个Java堆复制浏览器。这个工具分析Java堆复制文件(jmap -dump 出来的 heap文件. )。jhat 命令解析Java堆转储文件,并启动一个 web server. 然后用浏览器来查看/浏览使用名 `

2、jhat 命令支持预先设计的查询, 比如显示某个类的所有实例. 还支持 对象查询语言(OQL, Object Query Language)。 OQL有点类似SQL,专门用来查询堆转储。 OQL相关的帮助信息可以在 jhat 命令所提供的服务器页面最底部. 如果使用默认端口, 则OQL帮助信息页面为: http://localhost:7000/oqlhelp/

$ jhat -J-Xmx1024m 333.tdump
Reading from 333.tdump...
Dump file created Wed Jan 08 10:39:57 CST 2020
Snapshot read, resolving...
Resolving 55284 objects...
Chasing references, expect 11 dots...........
Eliminating duplicate references...........
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

http://localhost:7000/

1578454068275

2.6.2、开始分析浏览器中的dump文件

2.6.2.1、显示出堆中所包含的所有的类http://localhost:7000/allClassesWithPlatform/

1578454494175

2.6.2.2、从根集能引用到的对象

1578454634899

2.6.2.3、显示平台包括的所有类的实例数量

1578454754576

2.6.2.4、堆实例的分布表

1578454696168

2.6.2.5、执行对象查询语句

1578454707109

jhat中的OQL(对象查询语言) 
如果需要根据某些条件来过滤或查询堆的对象,这是可能的,可以在jhat的html页面中执行OQL,来查询符合条件的对象

基本语法: 
select <javascript expression to select>
[from [instanceof] <class name> <identifier>]
[where <javascript boolean expression to filter>]

解释: 
(1)class name是java类的完全限定名,如:java.lang.String, java.util.ArrayList, [C是char数组, [Ljava.io.File是java.io.File[]
(2)类的完全限定名不足以唯一的辨识一个类,因为不同的ClassLoader载入的相同的类,它们在jvm中是不同类型的
(3)instanceof表示也查询某一个类的子类,如果不明确instanceof,则只精确查询class name指定的类
(4)from和where子句都是可选的
(5)java域表示:obj.field_name;java数组表示:array[index]

举例: 
(1)查询长度大于100的字符串
select s from java.lang.String s where s.count > 100
(2)查询长度大于256的数组
select a from [I a where a.length > 256
(3)显示匹配某一正则表达式的字符串
select a.value.toString() from java.lang.String s where /java/(s.value.toString())
(4)显示所有文件对象的文件路径
select file.path.value.toString() from java.io.File file
(5)显示所有ClassLoader的类名
select classof(cl).name from instanceof java.lang.ClassLoader cl
(6)通过引用查询对象
select o from instanceof 0xd404d404 o

built-in对象 -- heap 
(1)heap.findClass(class name) -- 找到类
select heap.findClass("java.lang.String").superclass
(2)heap.findObject(object id) -- 找到对象
select heap.findObject("0xd404d404")
(3)heap.classes -- 所有类的枚举
select heap.classes
(4)heap.objects -- 所有对象的枚举
select heap.objects("java.lang.String")
(5)heap.finalizables -- 等待垃圾收集的java对象的枚举
(6)heap.livepaths -- 某一对象存活路径
select heaplivepaths(s) from java.lang.String s
(7)heap.roots -- 堆根集的枚举

辨识对象的函数 
(1)classof(class name) -- 返回java对象的类对象
select classof(cl).name from instanceof java.lang.ClassLoader cl
(2)identical(object1,object2) -- 返回是否两个对象是同一个实例
select identical(heap.findClass("java.lang.String").name, heap.findClass("java.lang.String").name)
(3)objectid(object) -- 返回对象的id
select objectid(s) from java.lang.String s
(4)reachables -- 返回可从对象可到达的对象
select reachables(p) from java.util.Properties p -- 查询从Properties对象可到达的对象
select reachables(u, "java.net.URL.handler") from java.net.URL u -- 查询从URL对象可到达的对象,但不包括从URL.handler可到达的对象
(5)referrers(object) -- 返回引用某一对象的对象
select referrers(s) from java.lang.String s where s.count > 100
(6)referees(object) -- 返回某一对象引用的对象
select referees(s) from java.lang.String s where s.count > 100
(7)refers(object1,object2) -- 返回是否第一个对象引用第二个对象
select refers(heap.findObject("0xd4d4d4d4"),heap.findObject("0xe4e4e4e4"))
(8)root(object) -- 返回是否对象是根集的成员
select root(heap.findObject("0xd4d4d4d4")) 
(9)sizeof(object) -- 返回对象的大小
select sizeof(o) from [I o
(10)toHtml(object) -- 返回对象的html格式
select "<b>" + toHtml(o) + "</b>" from java.lang.Object o
(11)选择多值
select {name:t.name?t.name.toString():"null",thread:t} from instanceof java.lang.Thread t

数组、迭代器等函数 
(1)concat(enumeration1,enumeration2) -- 将数组或枚举进行连接
select concat(referrers(p),referrers(p)) from java.util.Properties p
(2)contains(array, expression) -- 数组中元素是否满足某表达式
select p from java.util.Properties where contains(referres(p), "classof(it).name == 'java.lang.Class'")
返回由java.lang.Class引用的java.util.Properties对象
built-in变量
it -- 当前的迭代元素
index -- 当前迭代元素的索引
array -- 被迭代的数组
(3)count(array, expression) -- 满足某一条件的元素的数量
select count(heap.classes(), "/java.io./(it.name)")
(4)filter(array, expression) -- 过滤出满足某一条件的元素
select filter(heap.classes(), "/java.io./(it.name)")
(5)length(array) -- 返回数组长度
select length(heap.classes())
(6)map(array,expression) -- 根据表达式对数组中的元素进行转换映射
select map(heap.classes(),"index + '-->' + toHtml(it)")
(7)max(array,expression) -- 最大值, min(array,expression)
select max(heap.objects("java.lang.String"),"lhs.count>rhs.count")
built-in变量
lhs -- 左边元素
rhs -- 右边元素
(8)sort(array,expression) -- 排序
select sort(heap.objects('[C'),'sizeof(lhs)-sizeof(rhs)')
(9)sum(array,expression) -- 求和
select sum(heap.objects('[C'),'sizeof(it)')
(10)toArray(array) -- 返回数组
(11)unique(array) -- 唯一化数组

ContactAuthor