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

jcmd命令实战-LMLPHP

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

jcmd命令实战-LMLPHP

jcmd命令实战-LMLPHP

其实最常用的是:

jcmd命令实战-LMLPHP

还可以:

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

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

jcmd命令实战-LMLPHP

然后查看一下它进程:

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

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

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

jcmd命令实战-LMLPHP

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命令实战-LMLPHP

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的命令工具了,关于线程貌似之前我们写过一个死锁的例子,这里再运行一下这个程序来用这个命令观测一下:

jcmd命令实战-LMLPHP

jcmd命令实战-LMLPHP

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这个例子:

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

木问题的~~

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=\n
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命令实战-LMLPHP

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

jcmd命令实战-LMLPHP

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

05-13 19:26