jcmd

在线提出的问题表明,开发人员偶尔会希望通过Java应用程序访问通常从针对应用程序外部运行JConsole , VisualVM或JDK命令行工具获得的信息类型。 以下是这类问题的一些示例:

  • 如何以编程方式获取jmap直方图?
  • 以编程方式从Java应用程序中转储堆
  • 查找运行哪种类型的垃圾收集器

我最近在博客上介绍了 jcmd 的用处 。 命令行JDK工具的“ 瑞士军刀 ”提供了有关运行Java进程的许多信息,并且开发人员可能希望通过编程方式获取的许多类型的信息都可以通过jcmd

“ JDK 8页面上的工具增强 ”指出:“ JDK 8提供了对诊断命令的远程访问,以前只能通过jcmd工具在本地访问这些诊断命令。 使用Java管理扩展(JMX)提供了远程访问,因此诊断命令将向注册到平台MBean服务器的平台MBean公开。 MBean是com.sun.management.DiagnosticCommandMBean接口。” 在“ 在JConsole和VisualVM中查看DiagnosticCommandMBean”一文中 ,我研究了如何通过JConsole和VisualVM使用JMX和DiagnosticCommandMBean在运行中的JVM进程上访问jcmd类型信息。

在这篇文章中我看看如何使用com.sun.management.DiagnosticCommandMBean以编程方式访问信息提供jcmd 。

通过JMX使用ObjectName “ com.sun.management:type=DiagnosticCommand ”访问DiagnosticCommandMBean 。 大多数操作不需要参数,并返回String 。 考虑到这一点,下面的代码片段展示了一种访问具有String[]签名, String返回类型且实际上不需要参数的操作的通用方法。

设置DiagnosticCommandMBean和访问相同签名操作的通用方法

/** Object Name of DiagnosticCommandMBean. */public final static String DIAGNOSTIC_COMMAND_MBEAN_NAME ="com.sun.management:type=DiagnosticCommand";/** My MBean Server. */private final MBeanServer server = ManagementFactory.getPlatformMBeanServer();/** Platform MBean Server. */private final ObjectName objectName;//  . . ./*** Invoke operation on the DiagnosticCommandMBean that accepts*    String array argument but does not require any String*    argument and returns a String.** @param operationName Name of operation on DiagnosticCommandMBean.* @param operationDescription Description of operation being invoked*    on the DiagnosticCommandMBean.* @return String returned by DiagnosticCommandMBean operation.*/private String invokeNoStringArgumentsCommand(final String operationName, final String operationDescription){String result;try{result = (String) server.invoke(objectName, operationName, new Object[] {null}, new String[]{String[].class.getName()});}catch (InstanceNotFoundException | ReflectionException | MBeanException exception){result = "ERROR: Unable to access '" + operationDescription + "' - " + exception;}return result;}

使用上面的代码,方法invokeNoStringArgumentsCommand(String, String)可以用于访问DiagnosticCommandMBean提供的一些操作。 与jcmd一起使用时, help子命令很有用,因为它列出了与指定Java进程关联的可用子命令。 同样, DiagnosticCommandMBean提供的“帮助”操作在提供MBean支持的命令列表方面同样有帮助。 使用下面显示的代码(使用刚刚显示的代码)可以轻松访问此代码。

/*** Provide list of supported operations (help).** @return Single string containing names of supported operations.*/
public String getAvailableOperations()
{return invokeNoStringArgumentsCommand("help", "Help (List Commands)");
}

从一个简单的Java应用程序运行它会导致输出类似于下图所示:

The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
helpFor more information about a specific command use 'help '.

在我的博客文章“ 确定活动的HotSpot垃圾收集器”中 ,我写道jcmd可用于标识正在运行的Java进程的VM标志,并且可以从这些标志中收集正在使用的垃圾收集器。 因为DiagnosticCommandMBean支持如上所述的VM.flags操作,所以该操作可用于查看VM标志并从这些标志中确定正在使用哪个收集器。 下一个代码清单显示了两个示例方法,第一个方法访问进程的VM标志,第二个方法提供了如何使用第一个方法来标识正在使用的垃圾收集器的简单示例。

获取虚拟机标志并标识活动垃圾收集器

/*** Provide a String representing the Virtual Machine flags.** @return String containing the virtual machine flags.*/
public String getVirtualMachineFlags()
{return invokeNoStringArgumentsCommand("vmFlags", "Determine VM flags");
}/*** Provide String representing active/current garbage collector.** @return String representation of current garbage collector*    ("Parallel/Throughput", "Concurrent Mark Sweep (CMS)",*    "Garbage First", or "UNDETERMINED").*/
public String determineGarbageCollector()
{String garbageCollector;final String vmFlags = getVirtualMachineFlags();if (vmFlags.contains("+UseParallelGC") || vmFlags.contains("+UseParallelOldGC")){garbageCollector = "Parallel/Throughput";}else if (vmFlags.contains("+UseConcMarkSweepGC")){garbageCollector = "Concurrent Mark Sweep (CMS)";}else if (vmFlags.contains("+UseG1GC")){garbageCollector = "Garbage First";}else{garbageCollector = "UNDETERMINED";}return garbageCollector;
}

接下来显示带有VM标志的字符串和已标识的垃圾收集器的输出:

-XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2128609280 -XX:MaxNewSize=709361664 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Parallel/Throughput

已经显示的示例(访问帮助和VM标志)说明了相同的通用方法,该方法可用于以编程方式访问具有相同签名的DiagnosticCommandMBean上的其他操作。 接下来显示一系列代码清单和相应的输出以说明其中的一些。

访问虚拟机正常运行时间

/*** Provide virtual machine uptime as single String.** @return Single string containing virtual machine uptime.*/
public String getVirtualMachineUptime()
{return invokeNoStringArgumentsCommand("vmUptime", "Virtual Machine Uptime");
}
0.272 s

访问线程转储

/*** Provide thread dump as single String.** @return Single string containing formatted thread dump.*/
public String getThreadDump()
{return invokeNoStringArgumentsCommand("threadPrint", "Thread Dump");
}
2016-04-30 20:21:22
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode):"Monitor Ctrl-Break" #10 daemon prio=5 os_prio=0 tid=0x00000000189ea800 nid=0x1590 runnable [0x000000001903e000]java.lang.Thread.State: RUNNABLEat java.net.DualStackPlainSocketImpl.accept0(Native Method)at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)- locked <0x0000000081208810> (a java.net.SocksSocketImpl)at java.net.ServerSocket.implAccept(ServerSocket.java:545)at java.net.ServerSocket.accept(ServerSocket.java:513)at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:90)at java.lang.Thread.run(Thread.java:745)"Service Thread" #9 daemon prio=9 os_prio=0 tid=0x0000000018915800 nid=0x2468 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C1 CompilerThread2" #8 daemon prio=9 os_prio=2 tid=0x0000000017087000 nid=0x17a0 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x0000000017080000 nid=0x1560 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x000000001707d000 nid=0x2004 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x000000001707b000 nid=0x2160 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001707a000 nid=0x458 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000000024f7000 nid=0x1964 in Object.wait() [0x00000000183ef000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x0000000081201570> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)- locked <0x0000000081201570> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000000024ee000 nid=0x270c in Object.wait() [0x00000000182ef000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x0000000081208c28> (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:502)at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)- locked <0x0000000081208c28> (a java.lang.ref.Reference$Lock)"main" #1 prio=5 os_prio=0 tid=0x0000000000c4e000 nid=0x24f8 waiting on condition [0x0000000000dee000]java.lang.Thread.State: RUNNABLEat sun.management.DiagnosticCommandImpl.executeDiagnosticCommand(Native Method)at sun.management.DiagnosticCommandImpl.access$000(DiagnosticCommandImpl.java:40)at sun.management.DiagnosticCommandImpl$Wrapper.execute(DiagnosticCommandImpl.java:128)at sun.management.DiagnosticCommandImpl.invoke(DiagnosticCommandImpl.java:230)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at dustin.examples.diagnostics.VirtualMachineDiagnostics.invokeNoStringArgumentsCommand(VirtualMachineDiagnostics.java:167)at dustin.examples.diagnostics.VirtualMachineDiagnostics.getThreadDump(VirtualMachineDiagnostics.java:88)at dustin.examples.diagnostics.VirtualMachineDiagnostics.main(VirtualMachineDiagnostics.java:187)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:483)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)"VM Thread" os_prio=2 tid=0x0000000017046000 nid=0x22b0 runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x0000000002417800 nid=0x1580 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x0000000002419000 nid=0x16d8 runnable "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000241a800 nid=0x177c runnable "GC task thread#3 (ParallelGC)" os_prio=0 tid=0x000000000241c800 nid=0x1974 runnable "VM Periodic Task Thread" os_prio=2 tid=0x0000000018918000 nid=0x10dc waiting on condition JNI global references: 15

获取类直方图

/*** Provide class histogram as single String.** @return Single string containing formatted class histogram.*/
public String getHistogram()
{return invokeNoStringArgumentsCommand("gcClassHistogram", "GC Class Histogram");
}
num     #instances         #bytes  class name
----------------------------------------------1:          3485         243064  [C2:           467         124976  [B3:           992         104200  java.lang.Class4:          3452          82848  java.lang.String5:          1006          46744  [Ljava.lang.Object;6:           525          46200  java.lang.reflect.Method7:           309          22248  java.lang.reflect.Field8:           519          16608  java.util.HashMap$Node9:           326          11760  [Ljava.lang.String;10:           211           8968  [I11:           434           8312  [Ljava.lang.Class;12:            77           7416  [Ljava.util.HashMap$Node;13:           179           7160  java.lang.ref.SoftReference14:           101           5656  java.lang.Class$ReflectionData15:            73           4672  java.net.URL16:            97           4656  java.util.HashMap17:            89           4560  [Ljava.lang.reflect.Method;18:           189           4536  javax.management.ImmutableDescriptor19:           279           4464  java.lang.Integer20:           139           4448  java.util.Hashtable$Entry21:           105           4200  java.util.WeakHashMap$Entry22:           129           4128  java.util.concurrent.ConcurrentHashMap$Node23:           128           4096  com.sun.jmx.mbeanserver.ConvertingMethod24:            90           3600  java.util.TreeMap$Entry25:            34           3360  [Ljava.util.WeakHashMap$Entry;26:             8           3008  java.lang.Thread27:            45           2880  javax.management.openmbean.OpenMBeanAttributeInfoSupport28:            87           2784  java.lang.ref.WeakReference29:           160           2560  java.lang.Object30:            49           2544  [Ljavax.management.MBeanAttributeInfo;31:           135           2536  [Lcom.sun.jmx.mbeanserver.MXBeanMapping;32:            30           2400  java.lang.reflect.Constructor33:            48           2304  javax.management.MBeanInfo34:            49           1960  java.io.ObjectStreamField35:            60           1920  javax.management.MBeanAttributeInfo36:            46           1840  java.util.LinkedHashMap$Entry37:            38           1824  sun.util.locale.LocaleObjectCache$CacheEntry38:            44           1760  java.lang.ref.Finalizer39:            30           1752  [Ljava.lang.reflect.Field;40:            36           1728  sun.misc.URLClassPath$JarLoader41:             1           1712  [[B42:            40           1600  sun.management.DiagnosticCommandArgumentInfo43:            31           1488  java.util.WeakHashMap44:            60           1440  java.util.ArrayList45:            11           1392  [Ljava.util.Hashtable$Entry;46:            42           1344  java.lang.ref.ReferenceQueue47:             2           1320  [J48:            10           1312  [Ljava.util.concurrent.ConcurrentHashMap$Node;49:            26           1248  java.util.logging.LogManager$LoggerWeakRef50:            47           1120  [Ljavax.management.ObjectName$Property;51:             1           1040  [Ljava.lang.Integer;52:            39           1008  [Ljavax.management.MBeanOperationInfo;53:            24            960  javax.management.ObjectName54:            38            912  java.io.ExpiringCache$Entry55:            19            912  sun.management.DiagnosticCommandInfo56:            18            864  java.util.TreeMap57:            12            864  java.util.logging.Logger58:            35            840  javax.management.ObjectName$Property59:            15            840  javax.management.openmbean.ArrayType60:            20            800  com.sun.jmx.mbeanserver.MXBeanSupport61:            20            800  javax.management.MBeanOperationInfo62:            14            784  sun.nio.cs.UTF_8$Encoder63:            32            768  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$IdentityMapping64:            12            768  java.util.jar.JarFile65:            19            760  sun.util.locale.BaseLocale$Key66:            15            720  java.lang.management.PlatformComponent67:            44            704  java.lang.ref.ReferenceQueue$Lock68:            11            704  java.util.concurrent.ConcurrentHashMap69:            21            672  com.sun.jmx.mbeanserver.WeakIdentityHashMap$IdentityWeakReference70:             7            672  java.util.jar.JarFile$JarFileEntry71:            12            672  java.util.zip.ZipFile$ZipFileInputStream72:            19            608  java.util.Locale73:            19            608  sun.management.DiagnosticCommandImpl$Wrapper74:            19            608  sun.util.locale.BaseLocale75:            18            576  javax.management.MBeanParameterInfo76:            10            560  java.util.LinkedHashMap77:            14            560  javax.management.openmbean.SimpleType78:            23            552  com.sun.jmx.mbeanserver.PerInterface$MethodAndSig79:            26            536  [Ljava.lang.reflect.Constructor;80:            22            528  com.sun.jmx.mbeanserver.NamedObject81:            22            528  sun.reflect.generics.tree.SimpleClassTypeSignature82:            13            520  java.security.AccessControlContext83:            16            512  java.util.logging.LogManager$LogNode84:            17            504  [Ljava.io.ObjectStreamField;85:             9            504  javax.management.openmbean.CompositeType86:            19            488  [Lsun.management.DiagnosticCommandArgumentInfo;87:            12            480  com.sun.jmx.mbeanserver.PerInterface88:            20            480  java.lang.Class$AnnotationData89:            20            480  java.util.Arrays$ArrayList90:            20            480  java.util.jar.Attributes$Name91:            19            456  [Ljavax.management.MBeanParameterInfo;92:            19            456  java.util.Locale$LocaleKey93:            14            448  java.util.concurrent.locks.ReentrantLock$NonfairSync94:             8            448  javax.management.openmbean.OpenMBeanParameterInfoSupport95:            20            440  [Ljavax.management.MBeanNotificationInfo;96:            13            416  java.io.File97:            22            408  [Lsun.reflect.generics.tree.TypeArgument;98:            10            400  java.io.FileDescriptor99:            10            400  sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl100:             1            384  java.lang.ref.Finalizer$FinalizerThread101:             6            384  java.nio.DirectByteBuffer102:             8            384  java.util.Hashtable103:             1            384  java.util.logging.LogManager$Cleaner104:            12            384  java.util.zip.ZipCoder105:             1            376  java.lang.ref.Reference$ReferenceHandler106:            15            360  javax.management.StandardMBean107:            22            352  sun.reflect.generics.tree.ClassTypeSignature108:             4            336  [D109:             7            336  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CompositeMapping110:             6            336  java.nio.DirectLongBufferU111:            14            336  java.util.concurrent.CopyOnWriteArrayList112:             6            336  sun.management.MemoryPoolImpl113:            14            336  sun.reflect.NativeConstructorAccessorImpl114:            16            328  [Ljava.lang.management.PlatformComponent;115:             4            320  [S116:            13            312  java.lang.management.ManagementPermission117:             9            288  java.lang.OutOfMemoryError118:            12            288  java.util.ArrayDeque119:            12            288  java.util.Collections$SingletonList120:             9            288  java.util.logging.Level121:            12            288  sun.misc.MetaIndex122:             5            280  sun.util.calendar.ZoneInfo123:             8            256  sun.misc.ProxyGenerator$PrimitiveTypeInfo124:             2            240  java.net.SocksSocketImpl125:             6            240  sun.management.MemoryPoolImpl$CollectionSensor126:             6            240  sun.management.MemoryPoolImpl$PoolSensor127:             6            240  sun.reflect.generics.repository.MethodRepository128:            14            224  java.util.concurrent.locks.ReentrantLock129:            14            224  sun.reflect.DelegatingConstructorAccessorImpl130:            13            216  [Ljavax.management.MBeanConstructorInfo;131:             9            216  java.util.logging.Level$KnownLevel132:             9            216  sun.util.logging.PlatformLogger$Level133:            10            208  [Ljava.lang.reflect.Type;134:             5            200  java.lang.ClassLoader$NativeLibrary135:             6            192  java.util.Vector136:             8            192  sun.reflect.generics.factory.CoreReflectionFactory137:             6            192  sun.reflect.generics.tree.MethodTypeSignature138:             2            176  java.net.DualStackPlainSocketImpl139:             9            168  [Lsun.reflect.generics.tree.FieldTypeSignature;140:             3            168  javax.management.openmbean.OpenMBeanOperationInfoSupport141:             9            160  [Lsun.reflect.generics.tree.FormalTypeParameter;142:             5            160  java.io.FileInputStream143:             4            160  java.security.ProtectionDomain144:             5            160  javax.management.MBeanNotificationInfo145:             5            160  javax.management.StandardEmitterMBean146:             6            144  java.util.LinkedList$Node147:             3            144  java.util.Properties148:             6            144  sun.misc.PerfCounter149:             6            144  sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl150:             6            144  sun.reflect.generics.scope.MethodScope151:             4            128  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$ArrayMapping152:             2            128  java.io.ExpiringCache$1153:             4            128  java.security.CodeSource154:             8            128  java.util.HashSet155:             4            128  java.util.LinkedList156:             1            120  [[Ljava.lang.String;157:             5            120  sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer158:             2            112  java.lang.Package159:             2            112  java.util.zip.ZipFile$ZipFileInflaterInputStream160:             1             96  [Ljava.lang.invoke.MethodType;161:             6             96  [Lsun.reflect.generics.tree.TypeSignature;162:             3             96  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$EnumMapping163:             4             96  java.lang.RuntimePermission164:             2             96  java.lang.ThreadGroup165:             6             96  java.lang.ThreadLocal166:             2             96  java.nio.HeapByteBuffer167:             4             96  java.util.Collections$UnmodifiableRandomAccessList168:             3             96  java.util.Stack169:             2             96  java.util.zip.Inflater170:             2             96  javax.management.openmbean.TabularType171:             2             96  sun.management.GarbageCollectorImpl172:             2             96  sun.nio.cs.StreamEncoder173:             4             96  sun.reflect.annotation.AnnotationInvocationHandler174:             3             96  sun.reflect.generics.reflectiveObjects.TypeVariableImpl175:             3             96  sun.reflect.generics.repository.ClassRepository176:             1             88  sun.misc.Launcher$AppClassLoader177:             1             88  sun.misc.Launcher$ExtClassLoader178:             1             80  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;179:             1             80  [Ljava.lang.invoke.LambdaForm;180:             2             80  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$TabularMapping181:             2             80  java.io.BufferedWriter182:             2             80  java.io.ExpiringCache183:             2             80  java.lang.invoke.MethodType184:             2             80  java.util.IdentityHashMap185:             2             80  sun.management.MemoryManagerImpl186:             2             80  sun.misc.FloatingDecimal$BinaryToASCIIBuffer187:             2             80  sun.misc.URLClassPath188:             1             72  [Ljavax.management.openmbean.SimpleType;189:             3             72  java.lang.annotation.RetentionPolicy190:             1             72  java.lang.invoke.MethodTypeForm191:             3             72  java.net.InetAddress$InetAddressHolder192:             3             72  java.util.Collections$SynchronizedSet193:             1             72  java.util.logging.LogManager$RootLogger194:             3             72  sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer195:             3             72  sun.reflect.NativeMethodAccessorImpl196:             3             72  sun.reflect.generics.tree.ClassSignature197:             3             72  sun.reflect.generics.tree.FormalTypeParameter198:             1             64  [F199:             2             64  [Ljava.lang.Thread;200:             2             64  [Ljava.lang.annotation.RetentionPolicy;201:             4             64  [Ljava.security.Principal;202:             2             64  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$CollectionMapping203:             4             64  com.sun.proxy.$Proxy1204:             2             64  java.io.FileOutputStream205:             2             64  java.io.FilePermission206:             2             64  java.io.PrintStream207:             2             64  java.lang.ThreadLocal$ThreadLocalMap$Entry208:             2             64  java.lang.VirtualMachineError209:             2             64  java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry210:             2             64  java.lang.ref.ReferenceQueue$Null211:             2             64  java.lang.reflect.Proxy$Key1212:             2             64  java.lang.reflect.WeakCache$CacheValue213:             2             64  java.security.BasicPermissionCollection214:             2             64  java.security.Permissions215:             4             64  java.security.ProtectionDomain$Key216:             4             64  java.util.LinkedHashMap$LinkedValues217:             2             64  java.util.PropertyPermission218:             2             64  sun.reflect.annotation.AnnotationType219:             1             56  [Ljava.lang.Runnable;220:             3             56  [Lsun.reflect.generics.tree.ClassTypeSignature;221:             1             56  [Lsun.util.logging.PlatformLogger$Level;222:             1             56  java.lang.invoke.MemberName223:             1             56  java.util.logging.LogManager224:             3             48  [Ljava.lang.annotation.Annotation;225:             2             48  [Ljava.lang.reflect.TypeVariable;226:             1             48  [[Ljava.lang.Object;227:             2             48  com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport$LoaderEntry228:             1             48  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory$Mappings229:             1             48  com.sun.jmx.mbeanserver.MBeanIntrospector$MBeanInfoMap230:             1             48  com.sun.jmx.mbeanserver.MBeanIntrospector$PerInterfaceMap231:             2             48  com.sun.jmx.mbeanserver.WeakIdentityHashMap232:             2             48  java.io.BufferedOutputStream233:             2             48  java.io.File$PathStatus234:             2             48  java.io.FilePermissionCollection235:             2             48  java.io.OutputStreamWriter236:             2             48  java.lang.StringBuilder237:             2             48  java.net.InetAddress238:             2             48  java.net.InetAddress$Cache239:             2             48  java.net.InetAddress$Cache$Type240:             2             48  java.nio.charset.CoderResult241:             3             48  java.nio.charset.CodingErrorAction242:             1             48  java.util.concurrent.locks.ReentrantReadWriteLock$FairSync243:             2             48  java.util.logging.Logger$LoggerBundle244:             2             48  java.util.zip.ZStreamRef245:             2             48  sun.management.ManagementFactoryHelper$1246:             2             48  sun.misc.NativeSignalHandler247:             2             48  sun.misc.Signal248:             1             48  sun.nio.cs.SingleByte$Decoder249:             3             48  sun.reflect.DelegatingMethodAccessorImpl250:             2             48  sun.reflect.generics.scope.ClassScope251:             2             40  [Lcom.sun.jmx.mbeanserver.ClassLoaderRepositorySupport$LoaderEntry;252:             1             40  [Ljava.lang.management.MemoryPoolMXBean;253:             1             40  com.sun.jmx.interceptor.DefaultMBeanServerInterceptor254:             1             40  com.sun.jmx.mbeanserver.JmxMBeanServer255:             1             40  com.sun.jmx.mbeanserver.MBeanServerDelegateImpl256:             1             40  java.io.BufferedInputStream257:             1             40  sun.management.DiagnosticCommandImpl258:             1             40  sun.nio.cs.StandardCharsets$Aliases259:             1             40  sun.nio.cs.StandardCharsets$Cache260:             1             40  sun.nio.cs.StandardCharsets$Classes261:             1             40  sun.nio.cs.UTF_8$Decoder262:             1             32  [Ljava.lang.OutOfMemoryError;263:             2             32  [Ljava.lang.StackTraceElement;264:             1             32  [Ljava.lang.ThreadGroup;265:             1             32  [Ljava.lang.management.MemoryManagerMXBean;266:             1             32  com.sun.jmx.mbeanserver.Repository267:             1             32  java.io.WinNTFileSystem268:             1             32  java.lang.ArithmeticException269:             2             32  java.lang.Boolean270:             1             32  java.lang.NullPointerException271:             2             32  java.lang.Shutdown$Lock272:             1             32  java.lang.StringCoding$StringDecoder273:             1             32  java.lang.reflect.WeakCache274:             1             32  java.net.Socket275:             2             32  java.nio.ByteOrder276:             1             32  java.util.Collections$UnmodifiableMap277:             2             32  java.util.HashMap$EntrySet278:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl279:             1             32  java.util.logging.LogManager$SystemLoggerContext280:             1             32  javax.management.MBeanConstructorInfo281:             1             32  sun.management.MemoryImpl282:             2             32  sun.net.www.protocol.jar.Handler283:             1             32  sun.nio.cs.StandardCharsets284:             1             24  [Ljava.io.File$PathStatus;285:             1             24  [Ljava.lang.invoke.MethodHandle;286:             1             24  [Ljava.net.InetAddress$Cache$Type;287:             1             24  [Ljava.net.InetSocketAddress;288:             1             24  [Ljava.security.ProtectionDomain;289:             1             24  [Lsun.launcher.LauncherHelper;290:             1             24  com.sun.jmx.mbeanserver.ClassLoaderRepositorySupport291:             1             24  com.sun.jmx.mbeanserver.MXBeanLookup292:             1             24  com.sun.jmx.remote.util.ClassLogger293:             1             24  dustin.examples.diagnostics.VirtualMachineDiagnostics294:             1             24  java.lang.ThreadLocal$ThreadLocalMap295:             1             24  java.lang.invoke.LambdaForm$NamedFunction296:             1             24  java.lang.invoke.MethodType$ConcurrentWeakInternSet297:             1             24  java.lang.reflect.ReflectPermission298:             1             24  java.net.Inet4Address299:             1             24  java.net.Inet6AddressImpl300:             1             24  java.net.ServerSocket301:             1             24  java.util.BitSet302:             1             24  java.util.Collections$EmptyMap303:             1             24  java.util.Collections$SetFromMap304:             1             24  java.util.Locale$Cache305:             1             24  java.util.concurrent.atomic.AtomicLong306:             1             24  java.util.concurrent.locks.ReentrantReadWriteLock307:             1             24  java.util.jar.Manifest308:             1             24  java.util.logging.LogManager$LoggerContext309:             1             24  java.util.logging.LoggingPermission310:             1             24  javax.management.NotificationBroadcasterSupport311:             1             24  sun.launcher.LauncherHelper312:             1             24  sun.management.CompilationImpl313:             1             24  sun.management.OperatingSystemImpl314:             1             24  sun.management.RuntimeImpl315:             1             24  sun.management.ThreadImpl316:             1             24  sun.management.VMManagementImpl317:             1             24  sun.misc.JarIndex318:             1             24  sun.misc.URLClassPath$FileLoader319:             1             24  sun.nio.cs.ISO_8859_1320:             1             24  sun.nio.cs.MS1252321:             1             24  sun.nio.cs.ThreadLocalCoders$1322:             1             24  sun.nio.cs.ThreadLocalCoders$2323:             1             24  sun.nio.cs.US_ASCII324:             1             24  sun.nio.cs.UTF_16325:             1             24  sun.nio.cs.UTF_16BE326:             1             24  sun.nio.cs.UTF_16LE327:             1             24  sun.nio.cs.UTF_8328:             1             24  sun.util.locale.BaseLocale$Cache329:             1             16  [Ljava.lang.Throwable;330:             1             16  [Ljava.nio.file.attribute.FileAttribute;331:             1             16  [Ljava.security.cert.Certificate;332:             1             16  [Ljava.util.logging.Handler;333:             1             16  com.intellij.rt.execution.application.AppMain$1334:             1             16  com.sun.jmx.interceptor.DefaultMBeanServerInterceptor$ResourceContext$1335:             1             16  com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory336:             1             16  com.sun.jmx.mbeanserver.DescriptorCache337:             1             16  com.sun.jmx.mbeanserver.MBeanAnalyzer$MethodOrder338:             1             16  com.sun.jmx.mbeanserver.MBeanInstantiator339:             1             16  com.sun.jmx.mbeanserver.MXBeanIntrospector340:             1             16  com.sun.jmx.mbeanserver.SecureClassLoaderRepository341:             1             16  java.io.FileDescriptor$1342:             1             16  java.lang.ApplicationShutdownHooks$1343:             1             16  java.lang.CharacterDataLatin1344:             1             16  java.lang.Runtime345:             1             16  java.lang.String$CaseInsensitiveComparator346:             1             16  java.lang.System$2347:             1             16  java.lang.Terminator$1348:             1             16  java.lang.invoke.MemberName$Factory349:             1             16  java.lang.management.PlatformComponent$1350:             1             16  java.lang.management.PlatformComponent$10351:             1             16  java.lang.management.PlatformComponent$11352:             1             16  java.lang.management.PlatformComponent$12353:             1             16  java.lang.management.PlatformComponent$13354:             1             16  java.lang.management.PlatformComponent$14355:             1             16  java.lang.management.PlatformComponent$15356:             1             16  java.lang.management.PlatformComponent$2357:             1             16  java.lang.management.PlatformComponent$3358:             1             16  java.lang.management.PlatformComponent$4359:             1             16  java.lang.management.PlatformComponent$5360:             1             16  java.lang.management.PlatformComponent$6361:             1             16  java.lang.management.PlatformComponent$7362:             1             16  java.lang.management.PlatformComponent$8363:             1             16  java.lang.management.PlatformComponent$9364:             1             16  java.lang.ref.Reference$Lock365:             1             16  java.lang.reflect.Proxy$KeyFactory366:             1             16  java.lang.reflect.Proxy$ProxyClassFactory367:             1             16  java.lang.reflect.ReflectAccess368:             1             16  java.net.InetAddress$2369:             1             16  java.net.URLClassLoader$7370:             1             16  java.nio.Bits$1371:             1             16  java.nio.Bits$1$1372:             1             16  java.nio.charset.CoderResult$1373:             1             16  java.nio.charset.CoderResult$2374:             1             16  java.security.ProtectionDomain$1375:             1             16  java.security.ProtectionDomain$3376:             1             16  java.util.Collections$EmptyIterator377:             1             16  java.util.Collections$EmptyList378:             1             16  java.util.Collections$EmptySet379:             1             16  java.util.Collections$SingletonSet380:             1             16  java.util.HashMap$Values381:             1             16  java.util.Hashtable$EntrySet382:             1             16  java.util.WeakHashMap$KeySet383:             1             16  java.util.concurrent.atomic.AtomicInteger384:             1             16  java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock385:             1             16  java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter386:             1             16  java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock387:             1             16  java.util.jar.Attributes388:             1             16  java.util.jar.JavaUtilJarAccessImpl389:             1             16  java.util.logging.LoggingProxyImpl390:             1             16  java.util.zip.ZipFile$1391:             1             16  javax.management.JMX392:             1             16  javax.management.MBeanServerBuilder393:             1             16  javax.management.NotificationBroadcasterSupport$1394:             1             16  sun.management.ClassLoadingImpl395:             1             16  sun.management.HotSpotDiagnostic396:             1             16  sun.management.ManagementFactoryHelper$PlatformLoggingImpl397:             1             16  sun.misc.ASCIICaseInsensitiveComparator398:             1             16  sun.misc.FloatingDecimal$1399:             1             16  sun.misc.Launcher400:             1             16  sun.misc.Launcher$Factory401:             1             16  sun.misc.Perf402:             1             16  sun.misc.Unsafe403:             1             16  sun.net.www.protocol.file.Handler404:             1             16  sun.nio.ch.FileChannelImpl$1405:             1             16  sun.reflect.ReflectionFactory406:             1             16  sun.reflect.generics.tree.TypeVariableSignature407:             1             16  sun.util.calendar.Gregorian
Total         16267         885480

jcmd可用的某些子命令仅在使用-XX:+ UnlockDiagnosticVMOptions (在运行Java进程时指定)解锁诊断操作时才可用。 如下面的代码列表和输出列表所示,对于DiagnosticCommandMBean对应对象而言,这是正确的。

访问班级统计

/*** Provide class statistics as single String.** This is only supported when {@code -XX:+UnlockDiagnosticVMOptions} is enabled.** @return Single string containing formatted class statistics.*/
public String getClassStatistics()
{return invokeNoStringArgumentsCommand("gcClassStats", "GC Class Statistics");
}
GC.class_stats command requires -XX:+UnlockDiagnosticVMOptions

我尚未看到对DiagnosticCommandMBean一个jcmd子命令是生jcmd子命令( jcmdGC.heap_dump )。 据我所知,通过查看VisualVM和JConsole中公开的操作以及查看由上述“帮助”操作列出的可用命令, DiagnosticCommandMBean没有公开任何等效操作。 尽管DiagnosticCommandMBean似乎没有提供调用堆转储的操作,但是另一个MBean(对象名称为com.sun.management:type=HotSpotDiagnostic的com.sun.management.HotSpotDiagnostic)与操作“ dumpHeap”一起使用,并对此进行了演示。在A. Sundararajan的博客文章“以编程方式从Java应用程序中转储堆 ”中。

结论

DiagnosticCommandMBean提供了jcmd的大多数功能,因此它使Java应用程序可以使用jcmd功能来针对自己运行该功能。

这篇文章中显示的代码清单可在GitHub上的类VirtualMachineDiagnostics 找到 。 我将来可能会添加或修改此类,但原始版本的代码与本文中所示的相同。

翻译自: https://www.javacodegeeks.com/2016/05/programmatic-jcmd-access.html

jcmd

jcmd_程序化JCMD访问相关推荐

  1. jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息

    jdk类加载器执行步骤 自从在JavaOne 2012上听说 jcmd以来,我就一直是命令行诊断工具jcmd的 粉丝 . 从那时起,我已经广泛使用了此工具,并多次在此博客中发布过此工具: jcmd:一 ...

  2. [JDK 11] jcmd中的类加载器层次结构详细信息

    自从在JavaOne 2012上听说 jcmd以来,我就一直是命令行诊断工具jcmd的 粉丝 . 从那时起,我已广泛使用此工具,并多次在此博客中发布过此工具: jcmd:一个可以全部统治的JDK命令行 ...

  3. OpenJDK-11的新特征

    OpenJDK-11的新特征 JDK 11是Java SE 11平台版本11的开源参考实现,由JSR 384在Java Community Process中指定. JDK 11 于2018年9月25日 ...

  4. 未来IT的三驾马车:AI、物联网和混合云

    来源:物联网智库 概要:未来的信息技术系统日益专注于数据在哪里生成和处理.数据如何提供和收集,以及这些数据移动起来有多快.找到一条最高效的路径是关键. 物联网.AI和混合云是同一个三角形的三条边,是同 ...

  5. redis存opc_KEPServerEX6完整免费版

    KEPServerEX6完整免费版是一款先进的连接平台,主要用于为您的应用程序提供单一来源的工业自动化数据,通过连接.管理.监视和控制不通的自动化设备和应用程序来实现工业数据.具有严谨的技术特征,支持 ...

  6. Java本机内存跟踪NMT实战详解

    JVM通常会额外分配内存.这些额外的分配,会导致java程序占用的内存,超出-Xmx的限制.让我们使用NMT查看内存的使用情况 NMT 是什么 NMT 是一种 Java Hotspot VM 功能,用 ...

  7. 第二章 AutoCAD ActiveX Automation概述

    AutoCAD的ActiveX自动操作的英文全称是AutoCAD ActiveX Automation,ActiveX是微软制定的一种实现程序间通信.调用的软件复用规范,它提供了一种控制AutoCAD ...

  8. SolidWorks二次开发语法技巧及基础

    语法: //变量 'HRESULT  接口返回值 用于异常调用时判断  本质 typedef LONG HRESULT; 32位 S_OK S_FALSE 'OLECHAR 特定平台上表示文本数据 w ...

  9. B站 全套java面试(200道)问题MD(题目+答案)

    Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...

最新文章

  1. 公钥和私钥的简单通俗说明
  2. 大四学生对于股票的思考
  3. Hibernate的懒加载问题
  4. java静态初始化块的作用_Java 中的 static 使用之静态初始化块
  5. php匿名类的应用场景,【modernPHP专题(9)】匿名类
  6. 构思解决问题的一般范式
  7. 什么是java源码文件,什么是字节码文件,初程序的编译和运行
  8. dos批处理命令详解(转)
  9. 话里话外:从信息系统两大特性理解信息化的实施难度
  10. HTTP 请求返回代码含义
  11. 一文读懂特征值分解EVD与奇异值分解SVD
  12. mysql用alter创建外键_MySQL入门(alter语法 与 外键)
  13. English音标(全)与单词家园
  14. 每日算法刷题Day3-起始时间转换、二次方根、while连续输入、斐波那契思路
  15. jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company
  16. 使用SPSS 进行两组独立样本的t检验、F检验、显著性差异、计算p值
  17. ctf MISC 放松一下吧
  18. python 聚宽 对股票名称或代码进行查询
  19. office文件转换为pdf文件
  20. jquery获取元素索引值index()

热门文章

  1. CF1153F-Serval and Bonus Problem【dp,数学期望】
  2. AT3949-[AGC022D]Shopping【贪心】
  3. P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】
  4. P4254-[JSOI2008]Blue Mary开公司【李超树】
  5. P3806-【模板】点分治1
  6. 2021牛客暑期多校训练营8 J-Tree(思维dp+rmq)
  7. codeforces1457 C. Bouncing Ball
  8. Codeforces Round #676 (Div. 2) E待补
  9. 为什么不应该重写service方法
  10. Java中的List你真的会用吗