jconsoleを介してアクセス可能なすべてのJMXデータをログに記録できるようにしたい。これをプログラムで行う方法はありますか?システムのロギングの形式を構築していて、jconsoleに似たツールで表示可能な間隔のあるデータを作成したいと思います。
どうすればこれを行うことができますか?
java.lang.management.ManagementFactory を使用すると、JMXデータにアクセスできます。
ig
List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean mpb : memPoolBeans) {
System.out.println("Memory Pool: " + mpb.getName());
}
いくつかのサンプルはSOクエリで入手できます:[java] + managementfactory
良い読み物:https ://www.ibm.com/developerworks/library/j-jtp09196/index.html
リモートVMに接続する完全な実装の場合:
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() );
}
情報から、必要に応じてオブジェクト名と属性を照会できます。
私は同じことをしたいときに、このコマンドライン JMX クライアントを出発点として使用しました。