jcmd命令实战

继续来根据之前的那篇infoq的文章的介绍熟悉工具,上一次咱们学习使用了:

接下来学习它里面提到的另一个工具:

jcmd是一个非常之强大的命令行工具,能输出很多很多的信息,也是在处理JVM的一些问题经常要接触到的一个工具,这个命令也是需要一个进程ID的,而在之前咱们来查询pid时是使用了一个不是特别简明的一个方式,回忆一下:

其实jdk提供了一个jps来获取JVM进程的所有pid信息,而且非常简洁,下面来瞅一下:

可以查看一下它的使用帮助:

加上不同的参数其输出也会不一样,简单的演练一下:

其实最常用的是:

还可以:

总之,之后查看JVM可以用jps来代替之前的ps繁琐方式啦,接下来用一下jcmd命令,直接敲它:

貌似跟jps命令没啥大的区别,都是获取当前JVM进程的一些信息,也就是简单的jcmd命令跟jps在打印JVM信息上是可以互换的,当然要是jcmd只有这个功能那也不会专门来学习它了,先来瞅一下它的帮助使用说明:

jcmd pid VM.flags:查看JVM的启动参数

接下来具体用jcmd来查询JVM的一些东东,先来查看一下JVM的启动参数,首先还是运行一下MyTest5这个程序:

然后查看一下它进程:

接下来用jcmd来查看一下此进程的JVM启动参数,可以:

这就可以清晰的通过命令的方式来查看到启动参数啦,还是很方便。

由于MyTest5这个程序木有手动配置自己的JVM启动参数:

这里换成MyTest4,因为它配启动参数了:

启动一下它,然后再查看一下:

jcmd pid help:列出当前运行的Java进程可以执行的操作。

在上面查看JVM的启动参数命令中,有个东东很奇怪:

那这些操作来源于哪里呢?其实可以通过标题所示的这个命令来查看,咱们还是以MyTest5运行为例演示一下它的用法:

也可以明显感受到jcmd的强大之处,上面这么多只挑重点来学习。

jcmd pid help JFR.dump:查看具体命令的选项。

我们已经知道了命令可以跟一些哪些执行操作,那具体操作的选项又有哪些呢,于是乎用它就可以了,以JFR.dump为例:

jcmd pid PerfCounter.print:查看JVM性能相关的参数。

直接试验一下:

xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 97595 help JFR.dump
97595:
JFR.dump
Copies contents of a JFR recording to file. Either the name or the recording id must be specified.

Impact: Low

Permission: java.lang.management.ManagementPermission(monitor)

Syntax : JFR.dump [options]

Options: (options must be specified using the <key> or <key>=<value> syntax)
    name : [optional] Recording name, e.g. "My Recording" (STRING, no default value)
    recording : [optional] Recording number, use JFR.check to list available recordings (JLONG, -1)
    filename :  Copy recording data to file, i.e "/Users/user/My Recording.jfr" (STRING, no default value)
    compress : [optional] GZip-compress "filename" destination (BOOLEAN, false)
xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 97595 PerfCounter.print
97595:
java.ci.totalTime=94549036
java.cls.loadedClasses=516
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=0
java.property.java.class.path="/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Conten"
java.property.java.endorsed.dirs="/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/endorsed"
java.property.java.ext.dirs="/Users/xiongwei/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java"
java.property.java.home="/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre"
java.property.java.library.path="/Users/xiongwei/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:."
java.property.java.version="1.8.0_92"
java.property.java.vm.info="mixed mode"
java.property.java.vm.name="Java HotSpot(TM) 64-Bit Server VM"
java.property.java.vm.specification.name="Java Virtual Machine Specification"
java.property.java.vm.specification.vendor="Oracle Corporation"
java.property.java.vm.specification.version="1.8"
java.property.java.vm.vendor="Oracle Corporation"
java.property.java.vm.version="25.92-b14"
java.rt.vmArgs="-Dfile.encoding=UTF-8"
java.rt.vmFlags=""
java.threads.daemon=4
java.threads.live=5
java.threads.livePeak=5
java.threads.started=5
sun.ci.compilerThread.0.compiles=3
sun.ci.compilerThread.0.method=""
sun.ci.compilerThread.0.time=2053
sun.ci.compilerThread.0.type=1
sun.ci.compilerThread.1.compiles=1
sun.ci.compilerThread.1.method=""
sun.ci.compilerThread.1.time=313
sun.ci.compilerThread.1.type=1
sun.ci.compilerThread.2.compiles=118
sun.ci.compilerThread.2.method=""
sun.ci.compilerThread.2.time=41561
sun.ci.compilerThread.2.type=1
sun.ci.lastFailedMethod=""
sun.ci.lastFailedType=0
sun.ci.lastInvalidatedMethod=""
sun.ci.lastInvalidatedType=0
sun.ci.lastMethod="java/lang/String indexOf"
sun.ci.lastSize=70
sun.ci.lastType=1
sun.ci.nmethodCodeSize=124064
sun.ci.nmethodSize=206088
sun.ci.osrBytes=0
sun.ci.osrCompiles=0
sun.ci.osrTime=0
sun.ci.standardBytes=8561
sun.ci.standardCompiles=122
sun.ci.standardTime=94549036
sun.ci.threads=3
sun.ci.totalBailouts=0
sun.ci.totalCompiles=122
sun.ci.totalInvalidates=0
sun.classloader.findClassTime=75394974
sun.classloader.findClasses=1
sun.classloader.parentDelegationTime=75632149
sun.cls.appClassBytes=795
sun.cls.appClassLoadCount=7
sun.cls.appClassLoadTime=1380939
sun.cls.appClassLoadTime.self=1379136
sun.cls.classInitTime=200207388
sun.cls.classInitTime.self=83134592
sun.cls.classLinkedTime=30790764
sun.cls.classLinkedTime.self=27199048
sun.cls.classVerifyTime=3495135
sun.cls.classVerifyTime.self=2190525
sun.cls.defineAppClassTime=185979
sun.cls.defineAppClassTime.self=12729
sun.cls.defineAppClasses=1
sun.cls.initializedClasses=417
sun.cls.isUnsyncloadClassSet=0
sun.cls.jniDefineClassNoLockCalls=0
sun.cls.jvmDefineClassNoLockCalls=1
sun.cls.jvmFindLoadedClassNoLockCalls=20
sun.cls.linkedClasses=459
sun.cls.loadInstanceClassFailRate=0
sun.cls.loadedBytes=1076800
sun.cls.lookupSysClassTime=179168672
sun.cls.methodBytes=685560
sun.cls.nonSystemLoaderLockContentionRate=0
sun.cls.parseClassTime=108368386
sun.cls.parseClassTime.self=70142981
sun.cls.sharedClassLoadTime=70544
sun.cls.sharedLoadedBytes=0
sun.cls.sharedUnloadedBytes=0
sun.cls.sysClassBytes=1950237
sun.cls.sysClassLoadTime=324675751
sun.cls.systemLoaderLockContentionRate=0
sun.cls.time=363112365
sun.cls.unloadedBytes=0
sun.cls.unsafeDefineClassCalls=0
sun.cls.verifiedClasses=459
sun.gc.cause="No GC"
sun.gc.collector.0.invocations=0
sun.gc.collector.0.lastEntryTime=0
sun.gc.collector.0.lastExitTime=0
sun.gc.collector.0.name="PSScavenge"
sun.gc.collector.0.time=0
sun.gc.collector.1.invocations=0
sun.gc.collector.1.lastEntryTime=0
sun.gc.collector.1.lastExitTime=0
sun.gc.collector.1.name="PSParallelCompact"
sun.gc.collector.1.time=0
sun.gc.compressedclassspace.capacity=393216
sun.gc.compressedclassspace.maxCapacity=1073741824
sun.gc.compressedclassspace.minCapacity=0
sun.gc.compressedclassspace.used=77664
sun.gc.generation.0.capacity=44564480
sun.gc.generation.0.maxCapacity=715653120
sun.gc.generation.0.minCapacity=44564480
sun.gc.generation.0.name="new"
sun.gc.generation.0.space.0.capacity=34078720
sun.gc.generation.0.space.0.initCapacity=0
sun.gc.generation.0.space.0.maxCapacity=714604544
sun.gc.generation.0.space.0.name="eden"
sun.gc.generation.0.space.0.used=3408368
sun.gc.generation.0.space.1.capacity=5242880
sun.gc.generation.0.space.1.initCapacity=0
sun.gc.generation.0.space.1.maxCapacity=238551040
sun.gc.generation.0.space.1.name="s0"
sun.gc.generation.0.space.1.used=0
sun.gc.generation.0.space.2.capacity=5242880
sun.gc.generation.0.space.2.initCapacity=0
sun.gc.generation.0.space.2.maxCapacity=238551040
sun.gc.generation.0.space.2.name="s1"
sun.gc.generation.0.space.2.used=0
sun.gc.generation.0.spaces=3
sun.gc.generation.1.capacity=89653248
sun.gc.generation.1.maxCapacity=1431830528
sun.gc.generation.1.minCapacity=89653248
sun.gc.generation.1.name="old"
sun.gc.generation.1.space.0.capacity=89653248
sun.gc.generation.1.space.0.initCapacity=89653248
sun.gc.generation.1.space.0.maxCapacity=1431830528
sun.gc.generation.1.space.0.name="old"
sun.gc.generation.1.space.0.used=0
sun.gc.generation.1.spaces=1
sun.gc.lastCause="No GC"
sun.gc.metaspace.capacity=4587520
sun.gc.metaspace.maxCapacity=1082130432
sun.gc.metaspace.minCapacity=0
sun.gc.metaspace.used=792432
sun.gc.policy.avgBaseFootprint=0
sun.gc.policy.avgMajorIntervalTime=0
sun.gc.policy.avgMajorPauseTime=0
sun.gc.policy.avgMinorIntervalTime=0
sun.gc.policy.avgMinorPauseTime=0
sun.gc.policy.avgOldLive=0
sun.gc.policy.avgPretenuredPaddedAvg=0
sun.gc.policy.avgPromotedAvg=34078720
sun.gc.policy.avgPromotedDev=0
sun.gc.policy.avgPromotedPaddedAvg=34078720
sun.gc.policy.avgSurvivedAvg=5242880
sun.gc.policy.avgSurvivedDev=0
sun.gc.policy.avgSurvivedPaddedAvg=5242880
sun.gc.policy.avgYoungLive=0
sun.gc.policy.boundaryMoved=0
sun.gc.policy.changeOldGenForMajPauses=0
sun.gc.policy.changeOldGenForMinPauses=0
sun.gc.policy.changeYoungGenForMajPauses=0
sun.gc.policy.changeYoungGenForMinPauses=0
sun.gc.policy.collectors=2
sun.gc.policy.decideAtFullGc=0
sun.gc.policy.decreaseForFootprint=0
sun.gc.policy.decrementTenuringThresholdForGcCost=0
sun.gc.policy.decrementTenuringThresholdForSurvivorLimit=0
sun.gc.policy.desiredSurvivorSize=0
sun.gc.policy.edenSize=34078720
sun.gc.policy.freeSpace=68157440
sun.gc.policy.fullFollowsScavenge=0
sun.gc.policy.gcTimeLimitExceeded=0
sun.gc.policy.generations=3
sun.gc.policy.increaseOldGenForThroughput=0
sun.gc.policy.increaseYoungGenForThroughput=0
sun.gc.policy.incrementTenuringThresholdForGcCost=0
sun.gc.policy.liveAtLastFullGc=34078720
sun.gc.policy.liveSpace=0
sun.gc.policy.majorCollectionSlope=0
sun.gc.policy.majorGcCost=0
sun.gc.policy.majorPauseOldSlope=0
sun.gc.policy.majorPauseYoungSlope=0
sun.gc.policy.maxTenuringThreshold=15
sun.gc.policy.minorCollectionSlope=0
sun.gc.policy.minorGcCost=0
sun.gc.policy.minorPauseOldSlope=0
sun.gc.policy.minorPauseTime=0
sun.gc.policy.minorPauseYoungSlope=0
sun.gc.policy.mutatorCost=1
sun.gc.policy.name="ParScav:MSC"
sun.gc.policy.oldCapacity=134217728
sun.gc.policy.oldEdenSize=34078720
sun.gc.policy.oldPromoSize=34078720
sun.gc.policy.promoSize=34078720
sun.gc.policy.promoted=0
sun.gc.policy.scavengeSkipped=0
sun.gc.policy.survived=0
sun.gc.policy.survivorOverflowed=0
sun.gc.policy.tenuringThreshold=15
sun.gc.policy.youngCapacity=39321600
sun.gc.tlab.alloc=0
sun.gc.tlab.allocThreads=0
sun.gc.tlab.fastWaste=0
sun.gc.tlab.fills=0
sun.gc.tlab.gcWaste=0
sun.gc.tlab.maxFastWaste=0
sun.gc.tlab.maxFills=0
sun.gc.tlab.maxGcWaste=0
sun.gc.tlab.maxSlowAlloc=0
sun.gc.tlab.maxSlowWaste=0
sun.gc.tlab.slowAlloc=0
sun.gc.tlab.slowWaste=0
sun.os.hrt.frequency=1000000000
sun.os.hrt.ticks=714050340882
sun.perfdata.majorVersion=2
sun.perfdata.minorVersion=0
sun.perfdata.overflow=0
sun.perfdata.size=32768
sun.perfdata.timestamp=553597942
sun.perfdata.used=18848
sun.property.sun.boot.class.path="/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/classes"
sun.property.sun.boot.library.path="/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib"
sun.rt._sync_ContendedLockAttempts=0
sun.rt._sync_Deflations=3
sun.rt._sync_EmptyNotifications=0
sun.rt._sync_FailedSpins=0
sun.rt._sync_FutileWakeups=0
sun.rt._sync_Inflations=5
sun.rt._sync_MonExtant=128
sun.rt._sync_MonInCirculation=0
sun.rt._sync_MonScavenged=0
sun.rt._sync_Notifications=2
sun.rt._sync_Parks=2
sun.rt._sync_PrivateA=0
sun.rt._sync_PrivateB=0
sun.rt._sync_SlowEnter=0
sun.rt._sync_SlowExit=0
sun.rt._sync_SlowNotify=0
sun.rt._sync_SlowNotifyAll=0
sun.rt._sync_SuccessfulSpins=0
sun.rt.applicationTime=429558101791
sun.rt.createVmBeginTime=1555054870552
sun.rt.createVmEndTime=1555054871042
sun.rt.internalVersion="Java HotSpot(TM) 64-Bit Server VM (25.92-b14) for bsd-amd64 JRE (1.8.0_92-b14), built on Mar 31 2016 21:23:14 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)"
sun.rt.interruptedBeforeIO=0
sun.rt.interruptedDuringIO=0
sun.rt.javaCommand="com.jvm.memory.MyTest5"
sun.rt.jvmCapabilities="1100000000000000000000000000000000000000000000000000000000000000"
sun.rt.jvmVersion=425459726
sun.rt.safepointSyncTime=676359
sun.rt.safepointTime=1471726
sun.rt.safepoints=7
sun.rt.threadInterruptSignaled=0
sun.rt.vmInitDoneTime=1555054870846
sun.threads.vmOperationTime=57519
sun.urlClassLoader.readClassBytesTime=1087499
sun.zip.zipFile.openTime=77754125
sun.zip.zipFiles=19
xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ 

真的太多了。。

jcmd pid VM.uptime:查看JVM的启动时长。

jcmd pid GC.class_histogram:查看系统中类的统计信息。

xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 97595 GC.class_histogram
97595:

 num     #instances         #bytes  class name
----------------------------------------------
   1:          3329         238320  [C
   2:           441         128256  [B
   3:          3308          79392  java.lang.String
   4:           591          67184  java.lang.Class
   5:           586          35408  [Ljava.lang.Object;
   6:           631          25240  java.util.LinkedHashMap$Entry
   7:           287          13088  [Ljava.lang.String;
   8:           360          11520  java.util.HashMap$Node
   9:            22           8480  [Ljava.util.HashMap$Node;
  10:           118           7040  [I
  11:            98           6272  java.net.URL
  12:            79           5688  java.lang.reflect.Field
  13:           256           4096  java.lang.Integer
  14:            99           3960  java.lang.ref.SoftReference
  15:           116           3712  java.util.Hashtable$Entry
  16:            67           2680  java.lang.ref.Finalizer
  17:             7           2632  java.lang.Thread
  18:            74           2368  java.util.concurrent.ConcurrentHashMap$Node
  19:            45           2160  sun.misc.URLClassPath$JarLoader
  20:            39           1872  sun.util.locale.LocaleObjectCache$CacheEntry
  21:            22           1760  [Ljava.util.WeakHashMap$Entry;
  22:            16           1664  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  23:             1           1520  [[B
  24:            18           1440  java.lang.reflect.Constructor
  25:            28           1344  java.util.HashMap
  26:            23           1288  sun.nio.cs.UTF_8$Encoder
  27:            20           1280  java.util.concurrent.ConcurrentHashMap
  28:            13           1248  java.util.jar.JarFile$JarFileEntry
  29:            19           1216  java.util.jar.JarFile
  30:             8           1120  [Ljava.util.Hashtable$Entry;
  31:             2           1064  [Ljava.lang.invoke.MethodHandle;
  32:            44           1056  java.io.ExpiringCache$Entry
  33:            22           1056  java.util.WeakHashMap
  34:             1           1040  [Ljava.lang.Integer;
  35:            26           1040  java.io.ObjectStreamField
  36:            18           1008  java.lang.Class$ReflectionData
  37:            29            928  java.lang.ref.ReferenceQueue
  38:            15            840  java.util.zip.ZipFile$ZipFileInputStream
  39:            48            768  java.lang.Object
  40:            19            760  sun.util.locale.BaseLocale$Key
  41:            12            672  java.util.zip.ZipFile$ZipFileInflaterInputStream
  42:             8            640  [S
  43:            19            608  java.util.Locale
  44:            19            608  java.util.zip.ZipCoder
  45:            19            608  sun.util.locale.BaseLocale
  46:            12            576  java.util.zip.Inflater
  47:            17            544  java.io.File
  48:            31            496  java.lang.ref.ReferenceQueue$Lock
  49:             8            456  [Ljava.lang.reflect.Field;
  50:            19            456  java.util.ArrayDeque
  51:            19            456  java.util.Locale$LocaleKey
  52:            11            440  java.security.AccessControlContext
  53:             1            384  java.lang.ref.Finalizer$FinalizerThread
  54:             6            384  java.nio.DirectByteBuffer
  55:            16            384  sun.misc.MetaIndex
  56:             1            376  java.lang.ref.Reference$ReferenceHandler
  57:            15            360  java.util.LinkedList$Node
  58:             6            336  java.nio.DirectLongBufferU
  59:            10            320  java.lang.OutOfMemoryError
  60:            10            288  [Ljava.io.ObjectStreamField;
  61:             9            288  java.util.LinkedList
  62:            12            288  java.util.zip.ZStreamRef
  63:             7            280  java.util.WeakHashMap$Entry
  64:             5            280  sun.util.calendar.ZoneInfo
  65:             8            256  java.io.FileDescriptor
  66:             8            256  java.util.Vector
  67:            12            240  [Ljava.lang.Class;
  68:             5            240  java.util.Hashtable
  69:             2            216  [J
  70:             9            216  [Ljava.lang.reflect.Constructor;
  71:             9            216  java.util.ArrayList
  72:             9            216  sun.reflect.NativeConstructorAccessorImpl
  73:             2            160  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
  74:             5            160  java.io.FileInputStream
  75:             4            160  java.security.ProtectionDomain
  76:             5            160  sun.util.locale.provider.LocaleProviderAdapter$Type
  77:             3            144  java.util.Properties
  78:             6            144  sun.misc.PerfCounter
  79:             3            144  sun.misc.URLClassPath
  80:             9            144  sun.reflect.DelegatingConstructorAccessorImpl
  81:             2            128  java.io.ExpiringCache$1
  82:             4            128  java.lang.ThreadLocal$ThreadLocalMap$Entry
  83:             4            128  java.security.CodeSource
  84:             4            128  java.util.Stack
  85:             1            120  [[Ljava.lang.String;
  86:             5            120  java.util.Collections$UnmodifiableRandomAccessList
  87:             2            112  java.util.LinkedHashMap
  88:             2            112  java.util.ResourceBundle$CacheKey
  89:             3             96  java.io.FileOutputStream
  90:             2             96  java.lang.ThreadGroup
  91:             2             96  java.nio.HeapByteBuffer
  92:             2             96  java.util.ResourceBundle$BundleReference
  93:             1             96  sun.misc.Launcher$AppClassLoader
  94:             2             96  sun.nio.cs.StreamEncoder
  95:             1             88  java.lang.reflect.Method
  96:             1             88  sun.misc.Launcher$ExtClassLoader
  97:             2             80  java.io.BufferedWriter
  98:             2             80  java.io.ExpiringCache
  99:             2             80  sun.nio.cs.UTF_8$Decoder
 100:             3             72  java.lang.RuntimePermission
 101:             3             72  java.util.Arrays$ArrayList
 102:             3             72  java.util.Collections$SynchronizedSet
 103:             1             72  java.util.ResourceBundle$RBClassLoader
 104:             3             72  java.util.concurrent.atomic.AtomicLong
 105:             3             72  sun.misc.Signal
 106:             1             72  sun.util.locale.provider.JRELocaleProviderAdapter
 107:             2             64  [Ljava.lang.Thread;
 108:             4             64  [Ljava.security.Principal;
 109:             2             64  java.io.PrintStream
 110:             2             64  java.lang.ClassValue$Entry
 111:             2             64  java.lang.StringCoding$StringDecoder
 112:             2             64  java.lang.StringCoding$StringEncoder
 113:             2             64  java.lang.VirtualMachineError
 114:             2             64  java.lang.ref.ReferenceQueue$Null
 115:             4             64  java.security.ProtectionDomain$Key
 116:             4             64  java.util.HashSet
 117:             2             64  java.util.ResourceBundle$LoaderReference
 118:             1             56  java.lang.Package
 119:             2             48  java.io.BufferedOutputStream
 120:             2             48  java.io.File$PathStatus
 121:             2             48  java.io.OutputStreamWriter
 122:             3             48  java.lang.ThreadLocal
 123:             2             48  java.lang.ThreadLocal$ThreadLocalMap
 124:             2             48  java.nio.charset.CoderResult
 125:             3             48  java.nio.charset.CodingErrorAction
 126:             2             48  sun.misc.JarIndex
 127:             2             48  sun.misc.NativeSignalHandler
 128:             3             48  sun.net.www.protocol.jar.Handler
 129:             1             48  sun.util.locale.provider.LocaleResources$ResourceReference
 130:             1             48  sun.util.resources.TimeZoneNames
 131:             1             48  sun.util.resources.en.TimeZoneNames_en
 132:             1             40  [Lsun.util.locale.provider.LocaleProviderAdapter$Type;
 133:             1             40  java.io.BufferedInputStream
 134:             1             40  java.lang.ClassLoader$NativeLibrary
 135:             1             40  java.util.ResourceBundle$1
 136:             1             40  sun.nio.cs.StandardCharsets$Aliases
 137:             1             40  sun.nio.cs.StandardCharsets$Cache
 138:             1             40  sun.nio.cs.StandardCharsets$Classes
 139:             1             32  [Ljava.lang.OutOfMemoryError;
 140:             2             32  [Ljava.lang.StackTraceElement;
 141:             1             32  [Ljava.lang.ThreadGroup;
 142:             1             32  java.io.FilePermission
 143:             1             32  java.io.UnixFileSystem
 144:             1             32  java.lang.ArithmeticException
 145:             2             32  java.lang.Boolean
 146:             1             32  java.lang.NullPointerException
 147:             2             32  java.nio.ByteOrder
 148:             1             32  java.security.BasicPermissionCollection
 149:             1             32  java.security.Permissions
 150:             2             32  java.util.LinkedHashMap$LinkedKeySet
 151:             2             32  java.util.concurrent.atomic.AtomicInteger
 152:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 153:             1             32  sun.nio.cs.StandardCharsets
 154:             1             32  sun.util.locale.provider.LocaleResources
 155:             1             32  sun.util.locale.provider.LocaleServiceProviderPool
 156:             1             24  [Ljava.io.File$PathStatus;
 157:             1             24  [Ljava.lang.ClassValue$Entry;
 158:             1             24  [Ljava.lang.reflect.Method;
 159:             1             24  [Lsun.launcher.LauncherHelper;
 160:             1             24  java.io.FilePermissionCollection
 161:             1             24  java.lang.ClassValue$Version
 162:             1             24  java.lang.StringBuilder
 163:             1             24  java.lang.invoke.MethodHandleImpl$4
 164:             1             24  java.lang.reflect.ReflectPermission
 165:             1             24  java.util.BitSet
 166:             1             24  java.util.Collections$EmptyMap
 167:             1             24  java.util.Collections$SetFromMap
 168:             1             24  java.util.Locale$Cache
 169:             1             24  java.util.ResourceBundle$Control$CandidateListCache
 170:             1             24  sun.launcher.LauncherHelper
 171:             1             24  sun.misc.URLClassPath$FileLoader
 172:             1             24  sun.nio.cs.ISO_8859_1
 173:             1             24  sun.nio.cs.US_ASCII
 174:             1             24  sun.nio.cs.UTF_16
 175:             1             24  sun.nio.cs.UTF_16BE
 176:             1             24  sun.nio.cs.UTF_16LE
 177:             1             24  sun.nio.cs.UTF_8
 178:             1             24  sun.util.locale.BaseLocale$Cache
 179:             1             24  sun.util.locale.provider.TimeZoneNameProviderImpl
 180:             1             16  [Ljava.lang.Throwable;
 181:             1             16  [Ljava.security.cert.Certificate;
 182:             1             16  java.io.FileDescriptor$1
 183:             1             16  java.lang.CharacterDataLatin1
 184:             1             16  java.lang.ClassValue$Identity
 185:             1             16  java.lang.Runtime
 186:             1             16  java.lang.String$CaseInsensitiveComparator
 187:             1             16  java.lang.System$2
 188:             1             16  java.lang.Terminator$1
 189:             1             16  java.lang.invoke.MemberName$Factory
 190:             1             16  java.lang.invoke.MethodHandleImpl$2
 191:             1             16  java.lang.invoke.MethodHandleImpl$3
 192:             1             16  java.lang.ref.Reference$1
 193:             1             16  java.lang.ref.Reference$Lock
 194:             1             16  java.lang.reflect.ReflectAccess
 195:             1             16  java.net.URLClassLoader$7
 196:             1             16  java.nio.Bits$1
 197:             1             16  java.nio.charset.CoderResult$1
 198:             1             16  java.nio.charset.CoderResult$2
 199:             1             16  java.security.ProtectionDomain$2
 200:             1             16  java.security.ProtectionDomain$JavaSecurityAccessImpl
 201:             1             16  java.util.Collections$EmptyIterator
 202:             1             16  java.util.Collections$EmptyList
 203:             1             16  java.util.Collections$EmptySet
 204:             1             16  java.util.Hashtable$EntrySet
 205:             1             16  java.util.ResourceBundle$Control
 206:             1             16  java.util.WeakHashMap$KeySet
 207:             1             16  java.util.concurrent.atomic.AtomicBoolean
 208:             1             16  java.util.jar.JavaUtilJarAccessImpl
 209:             1             16  java.util.zip.ZipFile$1
 210:             1             16  sun.misc.Launcher
 211:             1             16  sun.misc.Launcher$Factory
 212:             1             16  sun.misc.Perf
 213:             1             16  sun.misc.Unsafe
 214:             1             16  sun.net.www.protocol.file.Handler
 215:             1             16  sun.reflect.ReflectionFactory
 216:             1             16  sun.util.calendar.Gregorian
 217:             1             16  sun.util.locale.provider.AuxLocaleProviderAdapter$NullProvider
 218:             1             16  sun.util.locale.provider.SPILocaleProviderAdapter
 219:             1             16  sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter
 220:             1             16  sun.util.resources.LocaleData
 221:             1             16  sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total         11547         692336
xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ 

jcmd pid Thread.print:查看线程堆栈信息。

xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 97595 Thread.print
97595:
2019-04-12 15:58:30
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode):

"Attach Listener" #9 daemon prio=9 os_prio=31 tid=0x00007fb6d3906800 nid=0x3803 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007fb6d300c000 nid=0x3603 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fb6d281e800 nid=0x4503 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fb6d2809800 nid=0x3503 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fb6d280c800 nid=0x3403 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fb6d300b000 nid=0x3303 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fb6d201f000 nid=0x4f03 in Object.wait() [0x0000700008a96000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000740010020> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    - locked <0x0000000740010020> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fb6d301f000 nid=0x2b03 in Object.wait() [0x0000700008993000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000740010010> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    - locked <0x0000000740010010> (a java.lang.ref.Reference$Lock)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"main" #1 prio=5 os_prio=31 tid=0x00007fb6d3805800 nid=0x2803 waiting on condition [0x0000700008381000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at com.jvm.memory.MyTest5.main(MyTest5.java:8)

"VM Thread" os_prio=31 tid=0x00007fb6d2805000 nid=0x5103 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fb6d3811800 nid=0x1e07 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fb6d3812000 nid=0x2103 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fb6d2000800 nid=0x2a03 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fb6d3812800 nid=0x5303 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007fb6d200a800 nid=0x3703 waiting on condition 

JNI global references: 6

貌似上面这个在jconsole和jvisualvm可视化的工具中都能看到,也就是GUI工具看到的也是集成了jcmd的命令工具了,关于线程貌似之前我们写过一个死锁的例子,这里再运行一下这个程序来用这个命令观测一下:

xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jps -l
98017 com.jvm.memory.MyTest3
96336 org.gradle.launcher.daemon.bootstrap.GradleDaemon
94336 
98016 org.jetbrains.jps.cmdline.Launcher
98024 sun.tools.jps.Jps
17418 
96495 org.gradle.launcher.daemon.bootstrap.GradleDaemon
xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 98017 Thread.print
98017:
2019-04-12 16:02:00
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode):

"Attach Listener" #12 daemon prio=9 os_prio=31 tid=0x00007fc497931000 nid=0x4203 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"DestroyJavaVM" #11 prio=5 os_prio=31 tid=0x00007fc497829800 nid=0x2803 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-B" #10 prio=5 os_prio=31 tid=0x00007fc4968fa000 nid=0x4103 waiting for monitor entry [0x00007000014e0000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.jvm.memory.A.method(MyTest3.java:17)
    - waiting to lock <0x00000007958c2f10> (a java.lang.Class for com.jvm.memory.A)
    at com.jvm.memory.B.method(MyTest3.java:35)
    - locked <0x0000000795a0fcb0> (a java.lang.Class for com.jvm.memory.B)
    at com.jvm.memory.MyTest3.lambda$main$1(MyTest3.java:10)
    at com.jvm.memory.MyTest3$$Lambda$2/1989780873.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

"Thread-A" #9 prio=5 os_prio=31 tid=0x00007fc4968f9800 nid=0x4703 waiting for monitor entry [0x00007000013dd000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.jvm.memory.B.method(MyTest3.java:31)
    - waiting to lock <0x0000000795a0fcb0> (a java.lang.Class for com.jvm.memory.B)
    at com.jvm.memory.A.method(MyTest3.java:21)
    - locked <0x00000007958c2f10> (a java.lang.Class for com.jvm.memory.A)
    at com.jvm.memory.MyTest3.lambda$main$0(MyTest3.java:6)
    at com.jvm.memory.MyTest3$$Lambda$1/2093631819.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007fc49680c800 nid=0x4903 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fc496804800 nid=0x3d03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fc49703d800 nid=0x4b03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fc497017000 nid=0x3a03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fc498031000 nid=0x3803 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fc496820000 nid=0x5003 in Object.wait() [0x0000700000c45000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000795588ee0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    - locked <0x0000000795588ee0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fc497808000 nid=0x5103 in Object.wait() [0x0000700000b42000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000795586b50> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    - locked <0x0000000795586b50> (a java.lang.ref.Reference$Lock)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"VM Thread" os_prio=31 tid=0x00007fc498028800 nid=0x2c03 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fc497009000 nid=0x2207 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fc497009800 nid=0x1f03 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fc49700a000 nid=0x2a03 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fc49700a800 nid=0x5403 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007fc497812000 nid=0x4803 waiting on condition 

JNI global references: 309


Found one Java-level deadlock:
=============================
"Thread-B":
  waiting to lock monitor 0x00007fc4980308a8 (object 0x00000007958c2f10, a java.lang.Class),
  which is held by "Thread-A"
"Thread-A":
  waiting to lock monitor 0x00007fc49802e018 (object 0x0000000795a0fcb0, a java.lang.Class),
  which is held by "Thread-B"

Java stack information for the threads listed above:
===================================================
"Thread-B":
    at com.jvm.memory.A.method(MyTest3.java:17)
    - waiting to lock <0x00000007958c2f10> (a java.lang.Class for com.jvm.memory.A)
    at com.jvm.memory.B.method(MyTest3.java:35)
    - locked <0x0000000795a0fcb0> (a java.lang.Class for com.jvm.memory.B)
    at com.jvm.memory.MyTest3.lambda$main$1(MyTest3.java:10)
    at com.jvm.memory.MyTest3$$Lambda$2/1989780873.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
"Thread-A":
    at com.jvm.memory.B.method(MyTest3.java:31)
    - waiting to lock <0x0000000795a0fcb0> (a java.lang.Class for com.jvm.memory.B)
    at com.jvm.memory.A.method(MyTest3.java:21)
    - locked <0x00000007958c2f10> (a java.lang.Class for com.jvm.memory.A)
    at com.jvm.memory.MyTest3.lambda$main$0(MyTest3.java:6)
    at com.jvm.memory.MyTest3$$Lambda$1/2093631819.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

Found 1 deadlock.

如我们之前在jconsole或jvisualvm看到的一样,之所以要学习命令行工具是因为有时候可能不能使用GUI工具,这时命令行工具就可以发挥其作用了。

jcmd pid GC.heap_jump filename:导出Heap dump文件,导出的文件可以通过jvisualvm查看。

还是回到MyTest5这个例子:

此时在桌在上就可以看到这个转储文件了:

我们可以用jvisualvm看能否正常打开它:

木问题的~~

jcmd pid VM.system_properties:查看JVM的属性信息。

xiongweideMacBook-Pro:CoffeeMachineClient xiongwei$ jcmd 98073 VM.system_properties
98073:
#Fri Apr 12 16:12:20 CST 2019
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib
java.vm.version=25.92-b14
gopherProxySet=false
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=:
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/Users/xiongwei/Documents/workspace/IntelliJSpace/jvm_lectue
java.runtime.version=1.8.0_92-b14
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/endorsed
os.arch=x86_64
java.io.tmpdir=/var/folders/80/ckcy6rp51vg303j_q084yc7w0000gn/T/
line.separator=

java.vm.specification.vendor=Oracle Corporation
os.name=Mac OS X
sun.jnu.encoding=UTF-8
java.library.path=/Users/xiongwei/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.13.6
user.home=/Users/xiongwei
user.timezone=Asia/Shanghai
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=xiongwei
java.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/tools.jar:/Users/xiongwei/Documents/workspace/IntelliJSpace/jvm_lectue/out/production/classes:/Users/xiongwei/.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/5.1.34/46deba4adbdb4967367b013cbc67b7f7373da60a/mysql-connector-java-5.1.34.jar:/Users/xiongwei/.gradle/caches/modules-2/files-2.1/cglib/cglib/3.2.0/bced5c83ed985c080a24dc5a42b0ca631556f413/cglib-3.2.0.jar:/Users/xiongwei/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.0.3/dcc2193db20e19e1feca8b1240dbbc4e190824fa/asm-5.0.3.jar:/Users/xiongwei/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant/1.9.4/6d473e8653d952045f550f4ef225a9591b79094a/ant-1.9.4.jar:/Users/xiongwei/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant-launcher/1.9.4/334b62cb4be0432769679e8b94e83f8fd5ed395c/ant-launcher-1.9.4.jar
java.vm.specification.version=1.8
sun.java.command=com.jvm.memory.MyTest5
java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre
sun.arch.data.model=64
user.language=zh
java.specification.vendor=Oracle Corporation
user.language.format=en
awt.toolkit=sun.lwawt.macosx.LWCToolkit
java.vm.info=mixed mode
java.version=1.8.0_92
java.ext.dirs=/Users/xiongwei/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/classes
java.vendor=Oracle Corporation
file.separator=/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeBig
sun.cpu.endian=little
sun.cpu.isalist=

jcmd pid VM.version:查看JVM的版本信息。

jcmd pid VM.command_line:查看JVM启动的命令行参数信息。

以上就是关于jcmd的一些重要参数的演练,目前是纯练,记录下来待未来有需要时再回来翻阅。

原文地址:https://www.cnblogs.com/webor2006/p/10669472.html