0
点赞
收藏
分享

微信扫一扫

[Java故障排除指南- JDK11-学习笔记]-3-诊断工具jcmd

Mezereon 2022-05-10 阅读 43



目录

  • ​​3 诊断工具jcmd​​
  • ​​3.1 简介​​
  • ​​3.2 jcmd 有用命令​​
  • ​​3.3 使用 jcmd 进行故障排除​​

3 诊断工具jcmd

3.1 简介

该jcmd实用程序用于向 JVM 发送诊断命令请求,这些请求对于控制 Java 飞行记录、故障排除和诊断 JVM 和 Java 应用程序很有用。

jcmd必须在运行 JVM 的同一台机器上使用,并且具有用于启动 JVM 的相同有效用户和组标识符。

一个特殊的命令

jcmd <process id/main class> PerfCounter.print

打印进程中的所有性能计数器。

该命令

jcmd <process id/main class> <command> [options]

将命令发送到 JVM。

以下示例是我查看了下本地Zookeeper进程,使用jcmd实用程序对 JVM 的诊断命令请求。

jps -l
45040 link.elastic.algorithm.sort.JavaSort
47139 sun.tools.jps.Jps
43384
15996 Eclipse
17389 org.apache.zookeeper.server.quorum.QuorumPeerMain
45039 org.jetbrains.jps.cmdline.Launcher


jcmd 17389 PerfCounter.print
17389:
java.ci.totalTime=4081782941
java.cls.loadedClasses=2951
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=0
java.property.java.class.path="/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../zookeeper-server/target/classes:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../build/classes:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../zookeeper-server/target/lib/*.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../build/lib/*.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/slf4j-log4j12-1.7.25.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/slf4j-api-1.7.25.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/netty-3.10.6.Final.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/log4j-1.2.17.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/jline-0.9.94.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../lib/audience-annotations-0.5.0.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../zookeeper-3.4.14.jar:/Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../zookeeper-server/src/main/resources/lib/*"
java.property.java.endorsed.dirs="/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/endorsed"
java.property.java.ext.dirs="/Users/song/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.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_181.jdk/Contents/Home/jre"
java.property.java.library.path="/Users/song/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:."
java.property.java.version="1.8.0_181"
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.181-b13"
java.rt.vmArgs="-Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false"
java.rt.vmFlags=""
java.threads.daemon=9
java.threads.live=13
java.threads.livePeak=17
java.threads.started=19
sun.ci.compilerThread.0.compiles=101
sun.ci.compilerThread.0.method=""
sun.ci.compilerThread.0.time=150768
sun.ci.compilerThread.0.type=1
sun.ci.compilerThread.1.compiles=123
sun.ci.compilerThread.1.method=""
sun.ci.compilerThread.1.time=303703
sun.ci.compilerThread.1.type=1
sun.ci.compilerThread.2.compiles=133
sun.ci.compilerThread.2.method=""
sun.ci.compilerThread.2.time=153284
sun.ci.compilerThread.2.type=1
sun.ci.compilerThread.3.compiles=2650
sun.ci.compilerThread.3.method=""
sun.ci.compilerThread.3.time=878724
sun.ci.compilerThread.3.type=1
sun.ci.lastFailedMethod=""
sun.ci.lastFailedType=0
sun.ci.lastInvalidatedMethod=""
sun.ci.lastInvalidatedType=0
sun.ci.lastMethod="java/io/DataOutputStream writeLong"
sun.ci.lastSize=538
sun.ci.lastType=1
sun.ci.nmethodCodeSize=4382304
sun.ci.nmethodSize=7432560
sun.ci.osrBytes=8511
sun.ci.osrCompiles=18
sun.ci.osrTime=226662724
sun.ci.standardBytes=351330
sun.ci.standardCompiles=2989
sun.ci.standardTime=3855120217
sun.ci.threads=4
sun.ci.totalBailouts=0
sun.ci.totalCompiles=3007
sun.ci.totalInvalidates=0
sun.classloader.findClassTime=136280873
sun.classloader.findClasses=252
sun.classloader.parentDelegationTime=11216798
sun.cls.appClassBytes=1030022
sun.cls.appClassLoadCount=546
sun.cls.appClassLoadTime=148073656
sun.cls.appClassLoadTime.self=93655404
sun.cls.classInitTime=545103878
sun.cls.classInitTime.self=395164525
sun.cls.classLinkedTime=109150785
sun.cls.classLinkedTime.self=49764063
sun.cls.classVerifyTime=59068645
sun.cls.classVerifyTime.self=23811702
sun.cls.defineAppClassTime=66412129
sun.cls.defineAppClassTime.self=22380276
sun.cls.defineAppClasses=370
sun.cls.initializedClasses=2409
sun.cls.isUnsyncloadClassSet=0
sun.cls.jniDefineClassNoLockCalls=0
sun.cls.jvmDefineClassNoLockCalls=364
sun.cls.jvmFindLoadedClassNoLockCalls=1149
sun.cls.linkedClasses=2753
sun.cls.loadInstanceClassFailRate=0
sun.cls.loadedBytes=5609488
sun.cls.lookupSysClassTime=122026090
sun.cls.methodBytes=2715528
sun.cls.nonSystemLoaderLockContentionRate=0
sun.cls.parseClassTime=318200532
sun.cls.parseClassTime.self=283891147
sun.cls.sharedClassLoadTime=223854
sun.cls.sharedLoadedBytes=0
sun.cls.sharedUnloadedBytes=0
sun.cls.sysClassBytes=8983504
sun.cls.sysClassLoadTime=372229695
sun.cls.systemLoaderLockContentionRate=0
sun.cls.time=1013072046
sun.cls.unloadedBytes=0
sun.cls.unsafeDefineClassCalls=189
sun.cls.verifiedClasses=2753
sun.gc.cause="No GC"
sun.gc.collector.0.invocations=1
sun.gc.collector.0.lastEntryTime=141455502165177
sun.gc.collector.0.lastExitTime=141455541705304
sun.gc.collector.0.name="PSScavenge"
sun.gc.collector.0.time=39540597
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=2097152
sun.gc.compressedclassspace.maxCapacity=1073741824
sun.gc.compressedclassspace.minCapacity=0
sun.gc.compressedclassspace.used=1958984
sun.gc.generation.0.capacity=89128960
sun.gc.generation.0.maxCapacity=1431306240
sun.gc.generation.0.minCapacity=89128960
sun.gc.generation.0.name="new"
sun.gc.generation.0.space.0.capacity=67108864
sun.gc.generation.0.space.0.initCapacity=0
sun.gc.generation.0.space.0.maxCapacity=1430257664
sun.gc.generation.0.space.0.name="eden"
sun.gc.generation.0.space.0.used=20431392
sun.gc.generation.0.space.1.capacity=11010048
sun.gc.generation.0.space.1.initCapacity=0
sun.gc.generation.0.space.1.maxCapacity=477102080
sun.gc.generation.0.space.1.name="s0"
sun.gc.generation.0.space.1.used=0
sun.gc.generation.0.space.2.capacity=11010048
sun.gc.generation.0.space.2.initCapacity=0
sun.gc.generation.0.space.2.maxCapacity=477102080
sun.gc.generation.0.space.2.name="s1"
sun.gc.generation.0.space.2.used=4925704
sun.gc.generation.0.spaces=3
sun.gc.generation.1.capacity=179306496
sun.gc.generation.1.maxCapacity=2863661056
sun.gc.generation.1.minCapacity=179306496
sun.gc.generation.1.name="old"
sun.gc.generation.1.space.0.capacity=179306496
sun.gc.generation.1.space.0.initCapacity=179306496
sun.gc.generation.1.space.0.maxCapacity=2863661056
sun.gc.generation.1.space.0.name="old"
sun.gc.generation.1.space.0.used=90128
sun.gc.generation.1.spaces=1
sun.gc.lastCause="Allocation Failure"
sun.gc.metaspace.capacity=17563648
sun.gc.metaspace.maxCapacity=1090519040
sun.gc.metaspace.minCapacity=0
sun.gc.metaspace.used=16895152
sun.gc.policy.avgBaseFootprint=268435456
sun.gc.policy.avgMajorIntervalTime=0
sun.gc.policy.avgMajorPauseTime=0
sun.gc.policy.avgMinorIntervalTime=141455531
sun.gc.policy.avgMinorPauseTime=39
sun.gc.policy.avgOldLive=0
sun.gc.policy.avgPretenuredPaddedAvg=0
sun.gc.policy.avgPromotedAvg=90128
sun.gc.policy.avgPromotedDev=0
sun.gc.policy.avgPromotedPaddedAvg=90128
sun.gc.policy.avgSurvivedAvg=4925704
sun.gc.policy.avgSurvivedDev=0
sun.gc.policy.avgSurvivedPaddedAvg=4925704
sun.gc.policy.avgYoungLive=4925704
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=11010048
sun.gc.policy.edenSize=67108864
sun.gc.policy.freeSpace=134217728
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=67108864
sun.gc.policy.liveSpace=273361152
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=39
sun.gc.policy.minorPauseYoungSlope=0
sun.gc.policy.mutatorCost=99
sun.gc.policy.name="ParScav:MSC"
sun.gc.policy.oldCapacity=179306496
sun.gc.policy.oldEdenSize=67108864
sun.gc.policy.oldPromoSize=67108864
sun.gc.policy.promoSize=67108864
sun.gc.policy.promoted=90128
sun.gc.policy.scavengeSkipped=0
sun.gc.policy.survived=4925704
sun.gc.policy.survivorOverflowed=0
sun.gc.policy.tenuringThreshold=7
sun.gc.policy.youngCapacity=78118912
sun.gc.tlab.alloc=8220828
sun.gc.tlab.allocThreads=17
sun.gc.tlab.fastWaste=753
sun.gc.tlab.fills=49
sun.gc.tlab.gcWaste=2174777
sun.gc.tlab.maxFastWaste=729
sun.gc.tlab.maxFills=14
sun.gc.tlab.maxGcWaste=167768
sun.gc.tlab.maxSlowAlloc=0
sun.gc.tlab.maxSlowWaste=36
sun.gc.tlab.slowAlloc=0
sun.gc.tlab.slowWaste=103
sun.management.JMXConnectorServer.address="service:jmx:rmi://127.0.0.1/stub/rO0ABXN9AAAAAQAlamF2YXgubWFuYWdlbWVudC5yZW1vdGUucm1pLlJNSVNlcnZlcnhyABdqYXZhLmxhbmcucmVmbGVjdC5Qcm94eeEn2iDMEEPLAgABTAABaHQAJUxqYXZhL2xhbmcvcmVmbGVjdC9JbnZvY2F0aW9uSGFuZGxlcjt4cHNyAC1qYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN0SW52b2NhdGlvbkhhbmRsZXIAAAAAAAAAAgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHcyAApVbmljYXN0UmVmAAkxMjcuMC4wLjEAAPXhdHK3QU4uD0yln0gOAAABgIeEI1aAAQB4"
sun.os.hrt.frequency=1000000000
sun.os.hrt.ticks=184898221276594
sun.perfdata.majorVersion=2
sun.perfdata.minorVersion=0
sun.perfdata.overflow=0
sun.perfdata.size=32768
sun.perfdata.timestamp=438640868
sun.perfdata.used=19984
sun.property.sun.boot.class.path="/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/classes"
sun.property.sun.boot.library.path="/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib"
sun.rt._sync_ContendedLockAttempts=66
sun.rt._sync_Deflations=194
sun.rt._sync_EmptyNotifications=0
sun.rt._sync_FailedSpins=0
sun.rt._sync_FutileWakeups=5
sun.rt._sync_Inflations=198
sun.rt._sync_MonExtant=384
sun.rt._sync_MonInCirculation=0
sun.rt._sync_MonScavenged=0
sun.rt._sync_Notifications=109
sun.rt._sync_Parks=159
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=182545431505024
sun.rt.createVmBeginTime=1651541025459
sun.rt.createVmEndTime=1651541025899
sun.rt.internalVersion="Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for bsd-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 01:02:31 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="org.apache.zookeeper.server.quorum.QuorumPeerMain /Users/song/Desktop/Computer/A/env/zookeeper-3.4.14/bin/../conf/zoo.cfg"
sun.rt.jvmCapabilities="1100000000000000000000000000000000000000000000000000000000000000"
sun.rt.jvmVersion=431292429
sun.rt.safepointSyncTime=17243640
sun.rt.safepointTime=180462896
sun.rt.safepoints=408
sun.rt.threadInterruptSignaled=0
sun.rt.vmInitDoneTime=1651541025505
sun.threads.vmOperationTime=148657232
sun.urlClassLoader.readClassBytesTime=56031525
sun.zip.zipFile.openTime=9932427
sun.zip.zipFiles=15

3.2 jcmd 有用命令

HotSpot VM不同版本可用的诊断命令可能不同;因此,使用是查看所有可用选项的最佳方式。 如下操作

jcmd <process id/main class> help

如下所示:

jcmd 17389 help
17389:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help

For more information about a specific command use 'help <command>'.

以下是该jcmd工具中一些最有用的命令。请记住,您始终可以使用jcmd <process id/main class> help 这些命令获取任何其他选项:

打印完整的 HotSpot 和 JDK 版本 ID。

jcmd <process id/main class> VM.version

打印为 VM 设置的所有系统属性。

可以显示数百行信息。

jcmd <process id/main class> VM.system_properties

打印用于 VM 的所有标志。

即使您没有提供任何标志,也会打印一些默认值,例如初始和最大堆大小。

jcmd <process id/main class> VM.flags

以秒为单位打印正常运行时间。

jcmd <process id/main class> VM.uptime

创建类直方图。

结果可能相当冗长,因此您可以将输出重定向到文件。内部类和特定于应用程序的类都包含在列表中。占用内存最多的类列在顶部,类按降序排列。

jcmd <process id/main class> GC.class_histogram

创建堆转储。

jcmd GC.heap_dump filename=Myheapdump

这与 using 相同jmap -dump:file= ,但jcmd它是推荐使用的工具。

创建堆直方图。

jcmd <process id/main class> GC.class_histogram filename=Myheaphistogram

这与 using 相同jmap -histo ,但jcmd它是推荐使用的工具。

打印带有堆栈跟踪的所有线程。

jcmd <process id/main class> Thread.print

3.3 使用 jcmd 进行故障排除

使用该jcmd实用程序进行故障排除。

该jcmd实用程序提供以下故障排除选项:

开始记录飞行窗口。

例如,要使用标识符在正在运行的 Java 进程上开始 2 分钟的录制7060并将其保存到当前目录中的 myrecording.jfr,请使用以下命令:

jcmd 17389 JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=myrecording.jfr

检查记录飞行窗口。

JFR.check诊断命令检查正在运行的记录。例如:

jcmd 17389 JFR.check

停止记录飞行窗口。

诊断命令会停止正在运行的JFR.stop记录,并且可以选择丢弃记录数据。例如:

jcmd 17389 JFR.stop

转储飞行窗口。

诊断命令会停止正在运行的JFR.dump记录,并且可以选择将记录转储到文件中。例如:

jcmd 17389 JFR.dump name=MyRecording filename=myrecording.jfr

创建堆转储。

创建堆转储的首选方法是

jcmd <pid> GC.heap_dump filename=Myheapdump

创建堆直方图。

创建堆直方图的首选方法是

jcmd <pid> GC.class_histogram filename=Myheaphistogram



举报

相关推荐

0 条评论