11

JBoss を使用してクライアント/サーバー アプリケーションを実行しています。

サーバー JVM の MBeanServer に接続するにはどうすればよいですか? MemoryMX MBean を使用してメモリ消費を追跡したいと考えています。

JNDI ルックアップを使用して JBoss MBeanServer に接続できますが、java.lang.MemoryMX MBean が JBoss MBeanServer に登録されていません。

編集: 要件は、クライアントからのメモリ使用量へのプログラムによるアクセスです。

4

5 に答える 5

18

私はこのようなクラスを書きました:

import javax.management.remote.JMXServiceURL;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;

public class JVMRuntimeClient 
{
    static void main(String[] args) throws Exception 
    {
        if (args == null)
    {
        System.out.println("Usage: java JVMRuntimeClient HOST PORT");
    }
    if(args.length < 2)
    {
        System.out.println("Usage: java JVMRuntimeClient HOST PORT");
    }

    try
    {
        JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi");
        JMXConnector connector = JMXConnectorFactory.connect(target);
        MBeanServerConnection remote = connector.getMBeanServerConnection();

        /**
        * this is the part where you MUST know which MBean to get
        * com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics
        * YOURS WILL VARY!
        */
        ObjectName bean = new ObjectName("com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics");

        MBeanInfo info = remote.getMBeanInfo(bean);
        MBeanAttributeInfo[] attributes = info.getAttributes();
        for (MBeanAttributeInfo attr : attributes)
        {
            System.out.println(attr.getDescription() + " " + remote.getAttribute(bean,attr.getName()));
        }
        connector.close();
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
        System.exit(0);
    }
   }
}
于 2010-08-31T20:00:41.820 に答える
6

JBoss サーバーの MBeanServer とは異なり、JVM の MBean サーバーはデフォルトでリモート監視を許可しません。次のことを可能にするには、さまざまなシステム プロパティを設定する必要があります。

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

于 2009-08-13T07:46:35.847 に答える