代码之家  ›  专栏  ›  技术社区  ›  Stefan Kendall

如何以编程方式转储JMX数据?

  •  11
  • Stefan Kendall  · 技术社区  · 15 年前

    我希望能够记录所有可以通过jconsole访问的jmx数据。有没有一种方法可以通过编程的方式来实现?我正在构建系统的一种日志记录形式,我想用类似jconsole的工具创建可查看的交互式数据。

    我该怎么做呢?

    2 回复  |  直到 7 年前
        1
  •  20
  •   Martin Spamer    7 年前

    java.lang.management.ManagementFactory 允许您访问jmx数据。

    I.G.

    List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
    for (MemoryPoolMXBean mpb : memPoolBeans) {
        System.out.println("Memory Pool: " + mpb.getName());
    }
    

    有些查询是在这样的查询:[ java] +管理工厂

    好读物: https://www.ibm.com/developerworks/library/j-jtp09196/index.html

    对于连接到远程虚拟机的完整实现:

    Map<String,String[]> env = new HashMap<String, String[]>();
    env.put( JMXConnector.CREDENTIALS, new String[]{"user","pass"} );
    JMXServiceURL address = new JMXServiceURL("service:rmi:///jndi/rmi://host:port/jmxrmi");
    JMXConnector connector = JMXConnectorFactory.connect(address,env);
    MBeanServerConnection mbs = connector.getMBeanServerConnection();
    
    //get all mbeans
    Set<ObjectInstance> beans = mbs.queryMBeans(null,null);
    
    for( ObjectInstance instance : beans )
    {
        MBeanInfo info = mbs.getMBeanInfo( instance.getObjectName() );
    }
    

    从信息中,您可以根据需要查询对象名称和属性。

        2
  •  5
  •   Mark    15 年前

    我用过这个 command line JMX client 作为我想做同样事情的起点。