简体   繁体   English

如何在远程JMX URL的Java中获取所有垃圾收集器MX bean?

[英]How to get all garbage collector MX beans in java of a remote jmx URL?

I am having a jmx remote url and I want to get all GC related information that it has exposed through jmx. 我有一个jmx远程URL,我想获取它通过jmx公开的所有与GC有关的信息。 I am using following code : 我正在使用以下代码:

MBeanServerConnection conn = getMBeanServerConnection(url);
        if (conn != null)
            return ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, GarbageCollectorMXBean.class);
return null;

The problem here is that I have not defined the name and only type, so it gives exception. 这里的问题是我还没有定义名称和唯一的类型,因此它给出了异常。 So I defined name also as following : - 所以我也定义了如下名称:

    return ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE+",name=PS MarkSweep", GarbageCollectorMXBean.class);

But here I have hard coded "PS MarkSweep". 但是这里我已经硬编码了“ PS MarkSweep”。 But the JVM might be using "ConcurrentMarkSweep". 但是JVM可能正在使用“ ConcurrentMarkSweep”。 How can I get the list of all GC MBeans? 如何获得所有GC MBean的列表?

You can do this by issuing an MBean query against the MBeanServerConnection as follows: 您可以通过对MBeanServerConnection发出MBean查询来做到这一点,如下所示:

MBeanServerConnection mbs = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> gcnames = mbs.queryNames(new ObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE + ",name=*"), null);
Set<GarbageCollectorMXBean> gcBeans = new HashSet<GarbageCollectorMXBean>(gcnames.size());
for(ObjectName on: gcnames) {
    gcBeans.add(ManagementFactory.newPlatformMXBeanProxy(mbs, on.toString(), GarbageCollectorMXBean.class));
}

Now the gcBeans set is loaded with one GarbageCollectorMXBean per Garbage Collector. 现在,每个垃圾收集器都在gcBeans集合中加载了一个GarbageCollectorMXBean。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM