jcmd_程序化JCMD访问

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android相册管理,Piktures - 最优雅的相册管理 - Android 应用 - 【最美应用】

多维度管理&#xff0c;美到每一个细节Piktures 的优雅&#xff0c;首先在于其浏览、管理的维度设计上。Android 原生相册最为人所诟病的就是其乱糟糟的浏览体验&#xff0c;所有带图片的文件夹都毫无章法地直接呈现。而 Piktures 则做了全面的改进。左滑即开打开文件夹管理模式…

【H264码流分析】 SPS/PPS/Slice Header

SPS中相关 H264 Profile 对视频压缩特性的描述&#xff0c;Profile越高&#xff0c;就说明采用了越高级的压缩特性 H264 Level Level是对视频的描述,Levrl越高&#xff0c;视频的码率&#xff0c;分辨率&#xff0c;fps越高 分辨率 帧相关 帧率计算 PPS Slice Header

access update语句执行_SQL Server与Access数据库sql语法十大差异

本文总结了SQL Server与Access数据库sql语法的十大差异。ACCESS结构简单容易处理&#xff0c;而且也能满足多数的应用程序要求&#xff0c;也是初学者的试牛刀。随着时间的推移&#xff0c;大多数数据库应用程序都会发展&#xff0c;变得更复杂&#xff0c;并且需要支持更多用户…

junit测试起名字规则_如何在JUnit 5中替换规则

junit测试起名字规则最近发布的JUnit 5&#xff08;又名JUnit Lambda&#xff09; alpha发行版引起了我的兴趣&#xff0c;在浏览文档时&#xff0c;我注意到规则以及运行程序和类规则都消失了。 根据文档&#xff0c;这些部分竞争的概念已被单个一致的扩展模型取代。 多年来&…

android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...

照片编辑免费软件app下载&#xff0c;提供给你全新的图片处理工具&#xff0c;这是软件包含了丰富的功能内容&#xff0c;软件一键即可轻松对各种照片組合、编辑和拼貼&#xff0c;那么有需要图片处理的用户下载该app使用吧&#xff01;【软件特色】【 拼图编辑&#xff1a;强大…

扩展 junit 框架_JUnit 5 –扩展模型

扩展 junit 框架我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在&#xff0c;让我们看一下JUnit 5扩展模型&#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 建立 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找…

【斐波拉切数列第N项】

#include<iostream> using namespace std;int main() {int f[100];f[0] 0, f[1] 1;int n;cin >> n;for (int i 2; i < n; i){f[i] f[i - 1] f[i - 2];}cout <<f[n] << endl;return 0; }

python怎么下载安装mac_Mac下内置python2.7如何安装模块?

目前电脑里内置的版本是python2.7 用easy_install下载了几个模块&#xff0c;再输入pip list&#xff0c;得到&#xff1a; beautifulsoup4 (4.5.1) easygui (0.98.0) pip (8.1.2) setuptools (20.10.1) vboxapi (1.0) 可以确定我想要的bs4已经下载成功。然后我再输入python se…

jooq_SpringBoot:与JOOQ合作

jooq在上一篇文章SpringBoot&#xff1a;与MyBatis一起工作中&#xff0c;我们学习了如何使用SpringBoot MyBatis Starter快速启动并运行Spring和MyBatis。 在本文中&#xff0c;我们将学习如何使用SpringBoot JOOQ Starter。 JOOQ&#xff08;面向Java对象的查询&#xff09;…

【WebRTC---入门篇】(十二)WebRTC传输协议

浏览器协议栈(左图传统HTTP 右图WebRTC) RTP/SRTP RTP是未加密的数据,SRTP是加密后的数据。 RTP协议

android4.0支持m3u8格式,【报Bug】安卓下无法播放M3U8格式音频,报错

详细问题描述(DCloud产品不会有明显的bug&#xff0c;所以你遇到的问题大都是在特定环境下才能重现的问题&#xff0c;请仔细描述你的环境和重现方式&#xff0c;否则DCloud很难排查解决你的问题)[内容]安卓下小程序音频播放器播放&#xff2d;3&#xff35;8格式文件报错重现步…

springcloud官方文档_通俗易懂!Spring Cloud简介:官方文档翻译版

什么是微服务&#xff1f;"微服务架构是一种架构模式&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间相互协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务和服务之间采用轻量级的通信机制相互沟通…

【RTMP协议分析与抓包实测】

传输协议 RTMP基本通讯 RTMP基于TCP之上传输 TCP三次握手,相关文章链接&#xff0c;TCP三次握手流程 进行握手 c- --> s 发送c0c1 c ---> s 发送c2 s ---> c 发送s0s1s2 建立RTMP连接 真实建立连接的场景 c- --> s RTMP发送connect建立连接 s ---> c 协商(滑动…

autowired_@Autowired所有的东西!

autowired最近&#xff0c;我写了Autowired注释 &#xff0c;它使我们可以编写更少的代码&#xff0c;从而使我们的生活更轻松 。 但是&#xff0c;使用它通常会使您的设计更加复杂。 尤其是当我们谈论在类的属性上使用它时。 它更容易违反 单一责任原则 。 这样可以更容易地注…

android message 代码,Android Handler移除Message详解及实例代码

Android Handler移除Message详解问题&#xff1a;1.removeMessage(what)函数是否只能移除对应what值的Message&#xff1f;2.对于Delayed发送的Message&#xff0c;能否提前remove&#xff1f;代码测试&#xff1a;package javine.k.testhandler;import android.app.Activity;i…

python中如何调用或修改元组中的元素_python 元组的使用方法

元组——tuple 列表非常适合用于存储在程序运行期间可能变化的数据集。 列表是可以修改的&#xff0c;但元组是不可修改的 Python将不能修改的值称为不可变的&#xff0c;而不可变的列表被称为元组 1. 元组的创建和删除 &#xff08;1&#xff09;使用赋值运算符直接创建元组 语…

【WebRTC---入门篇】(十三)WebRTC音视频数据采集

音视频采集API false表示不采集,true表示采集 WebRTC API适配 获取音视频设备的访问权限 通过 return navigator.mediaDevices.enumerateDevices();/*返回一个promise,为了获取音视频的权限*/ 视频约束

android按钮点击toast,关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?...

此文末参考链接&#xff1a;此段代码的教程以及使用接口的方式、switch语句的教程链接为链接1.汇总里说的有更多的实现方法&#xff0c;为链接2。文中链接为视觉统一&#xff0c;链接均于文末&#xff0c;以上为方便文中跳转&#xff0c;加了文中的跳转链接。以下代码为我学习b…

java用什么编译器_Java用Java编译

java用什么编译器在上一篇文章中&#xff0c;我写了关于如何在运行时生成代理的内容&#xff0c;我们已经了解到生成Java源代码的程度。 但是&#xff0c;要使用该类&#xff0c;必须对其进行编译&#xff0c;并将生成的字节码加载到内存中。 那是“编译”时间。 幸运的是&…

app登录界面背景 css_计算机毕业设计中Java web实现简登录页面(MyBatis+jsp+servlet+html+css+javascript)...

点击上方“蓝字”&#xff0c;关注我们.本文利用MyBatisjspservlethtmlcssjavascript实现了一个简单的登录页面。对用户输入的用户名和密码就行校验&#xff0c;校验通过则登录成功&#xff0c;密码和用户信息保存在mysql表中&#xff0c;通过MyBatis访问(MyBatis相关知识可参考…