程序化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

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

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

相关文章

Ubuntu瘦身与扩容运动

Ubuntu瘦身与扩容运动 2009-11-26 18:18:24| 分类&#xff1a; 计算机 | 标签&#xff1a; |字号大中小 订阅 Ubuntu瘦身与扩容运动 2009年08月14日 星期五 12:25大家都知道系统用久了就会慢慢变得臃肿,速度当然也就会有一些影响,所以当那些加速系统的方法不在奏效的时候…

认识jQuery

一、JavaScript库 把一些浏览器兼容性的代码或者需要常用的函数装在一个js文件里,封装了很多js代码的一个js文件就是一个库 二、jQuery 是一个JavaScript库&#xff0c;免费开源的&#xff0c;体积小&#xff0c;链式编程&#xff0c;隐式迭代&#xff0c;很多优点jQuery 的功能…

Axis2 WebService(配置、发布、调用)

from:http://www.lifeba.org/arch/java_axis2_webservice.html 准备工作 1、下载&#xff1a;axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip 下载地址&#xff1a;http://axis.apache.org/axis2/java/core/ 2、环境变量设置 AXIS2_HOME E:\research\axis2-1.5.4-bin\axis2-1.5.4 J…

SmartPDA图片

转载于:https://www.cnblogs.com/xyyshishuaige/p/9098613.html

基于国家标准的 EndNote 输出样式模板

发表于 2013-05-26作者 Haoxian Zeng浏览 983 次from:http://cnzhx.net/blog/endnote-output-style-cnzhx/1EndNote 相当于一个数据库&#xff0c;将添加/导入的文献存档。需要引用文献的时候就从中选择一个插入到文档中&#xff0c;EndNote 会自动给你编号、在文档末尾建立相应…

工厂设计模式解决什么问题_使用工厂模式解决设计问题

工厂设计模式解决什么问题工厂设计模式是面向对象环境中最常用的模式之一。 再次来自“创意设计”模式类别&#xff0c;即有关对象创建的所有信息。 在某些情况下&#xff0c;对象的创建很复杂&#xff0c;可能需要某种程度的抽象&#xff0c;以便客户端代码不了解这些复杂性和…

shiro 认证思路

转载于:https://www.cnblogs.com/hwgok/p/9101232.html

Java 9对可选的补充

哇&#xff0c;人们对Java 9的Stream API增添了 真正的兴趣。 想要更多&#xff1f; 让我们看一下…… 可选的 可选::流 这不需要任何解释&#xff1a; Stream<T> stream();想到的第一个词是&#xff1a; 终于 &#xff01; 最后&#xff0c;我们可以轻松地从可选值流…

Matlab功率谱估计

(2012-03-16 12:22:15) 随机信号处理 * 随机变量分布特征量 均值mean 协方差矩阵cov 相关系数矩阵corrcoef [R, P] corrcoef(X)&#xff0c;P值用于检验相关性&#xff0c;越小越相关&#xff0c;0.05以下为显著相关。 * 相关函数估计 相关函数估计xcorr [c,lags] xcorr(…

OO第三次博客作业——规格

OO第三次博客作业——规格 一、调研结果&#xff1a; 规格的历史&#xff1a; 引自博文链接&#xff1a;http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世界&#xff0c;而软件的特点是构造世界。软件的最底层就是0&#xff0c;1&#xff0c;两个…

EndNote使用技巧之一--参考文献的导入

2012-11-20 11:54:15| 分类&#xff1a; 学术相关 | 标签&#xff1a; |字号大中小 订阅 一、怎样给课题组的其他人员共享我的library? 打开要共享的libirary→点击file→send to→compressed lirary→在 Send to Compressed Library 窗口确认储存路径与文件名&#xf…

5.29

查看linux系统中空闲内存/物理内存使用/剩余内存 free -m top命令 是Linux下常用的性能 分析工具 ps -eL |wc -l 查看进程数 ulimit -a 查看资源限制 echo DDS_ROOT 查看DDS设置的环境变量 tcpdump -i eth0 src 192.168.2.204 查看源IP204的eth0网卡的数据包接收情况 用vi进入…

primefaces_PrimeFaces在GlassFish 3.1.2.2上推动大气

primefacesPrimeFaces 3.4在三天前发布。 除了通常令人敬畏的新组件和更新组件外&#xff0c;它还包括新的PrimeFaces Push框架。 基于Atmosphere&#xff0c;这为您的应用程序提供了简单的推送机制。 这是在最新的GlassFish 3.1.2.2上配置和运行它的方法。 准备工作 像往常一…

相关的意义

第四章 相关系数 [内容导读]   本章的内容在课程中具有承上启下的重要作用。一方面&#xff0c;相关系数是反映与描述一组数据的概括性特征量数&#xff0c;只不过这里的数据是二元变量的观测数据。另一方面&#xff0c;对相关系数内容的理解与掌握&#xff0c;是建立在散点…

oo第三次作业

一、规格历史 最初的程序设计是直接面向机器的&#xff0c;代码编写困难、可读性差&#xff0c;当时对于软件开发的需求并不多。随着对于程序规模的需求&#xff0c;出现了面向过程的设计思想&#xff0c;开发者开始忽略底层实现&#xff0c;进行程序设计。对于面向过程设计思想…

帮助推动Java EE向前发展

如果您还记得我写的题为《 Java EE 8&#xff1a;当前状态是什么》的文章 &#xff0c;很明显&#xff0c;在过去的几个月中&#xff0c;Java EE的发展肯定已经放缓。 肯定有一些Java EE下的JSR具有比其他JSR更多的活动&#xff0c;但是自JavaOne 2015以来&#xff0c;整个Java…

35

1 转载于:https://www.cnblogs.com/venicid/p/9116284.html

glassfish默认密码_在MySQL上使用含盐密码的GlassFish JDBC安全性

glassfish默认密码我在该博客上最成功的文章之一是有关在GlassFish上使用基于表单的身份验证设置JDBC安全领域的文章 。 对这篇文章的一些评论使我意识到&#xff0c;要真正使它安全&#xff0c;应该做的还很多。 开箱即用的安全性 图片&#xff1a; TheKenChan &#xff08; …

Endnote生成的中英文混排参考文献中“等”与“et al”的处理

已有 12791 次阅读 2010-3-27 00:50 |个人分类:学习|系统分类:科研笔记|关键词:Endnote,参考文献,等,et al from: http://blog.sciencenet.cn/home.php?modspace&uid485&doblog&id306545 相信有很多科研工作者在管理参考文献、写论文时选用了Endnote作为首选参考…

【洛谷】P4643 【模板】动态dp

题解 在冬令营上听到冬眠的东西&#xff0c;现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag&#xff0c;我去thusc之前要把WC2018T1乱搞过去 &#xff09; 好的&#xff0c;我们可以参考猫锟的动态动态dp的课件&#xff0c;然后你发现你什么都看不懂&#xff08;菜啊 但是我们…