2016-05-07 6 views
1

私は以下のような既存のJavaクラスを持っています。このクラスの各メソッドのメソッド呼び出しの数をJMXを使って監視したいと思います。どうすればいいのですか?私はgoogleを試みたが、全体がどのように接続されているかについての大きな図を見ることはできない。私はいくつかのコード例にJMXを使用して既存のJavaクラスを監視する方法は?

Public class RPCServer { 

    public void storeSchema() { // want to count number of method invocations 
     System.out.println("storeSchema"); 
    } 

    public void getSchema() { // want to count number of method invocations 
     System.out.println("getSchema"); 
    } 

    public void storeRow() { // want to count number of method invocations 
     System.out.println("storeRow"); 
    } 

    public void getRow() { //want to count number of method invocations 
     System.out.println("getRow"); 
    } 

} 

答えて

2

を見ることができれば、私はあなたがあなたのクラスのためのインタフェースを必要とする私は、このソリューション

最初に提案し、いくつかの方法がJMXを介して実行されているどのように多くの時間を見てみたい素晴らしいことです。

public interface RPCServerInterface { 
    int countMethodInvocation(String method); 
} 

次に、各関数が呼び出した回数をクラスに格納します。

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
RPCServer rpcServer = new RPCServer(); 
ObjectName objectName = new ObjectName("org.foo.RPCServer.jmx:type=RPCServerInterface"); 

StandardMBean standardMBean = new StandardMBean(rpcServer,RPCServerInterface.class); 
mBeanServer.registerMBean(standardMBean, objectName); 

org.foo.RPCServer.jmxは任意であるパス:

public class RPCServer implements RPCServerInterface{ 
    private int row; 
    private Map<String,Integer> countByMethod = new HashMap<String,Integer>(); 

    // +1 to the number of time of execution of this method 
    private void sumMethodInvocation(String method) { 
    if (countByMethod.containsKey(method)) { 
    int n = countByMethod.get(method); 
    countByMethod.put(method, n+1); 
    } else { 
    countByMethod.put(method,1); 
    } 
    } 

    // how many time the method has been invoked 
    @Override 
    public int countMethodInvocation(String method){ 
    return countByMethod.containsKey(method)?countByMethod.get(method):0; 
    } 

    public void setRow(int i) { 
    // register each time is executed 
    this.sumMethodInvocation("setRow"); 
    this.row = i; 
    } 
    public int getRow() { 
    // register each time is executed 
    this.sumMethodInvocation("getRow"); 
    return row; 
    } 
}} 
} 

次に、あなたのビーンを登録する必要があります。

次に、jconsoleを実行し、実行中のプロセスを見つけます。

jconsole choose processs

その後、コマンドcountMethodInvocationを実行することができますし、実行時間の数を取得することができます。このよう

Run program jconsole

このチュートリアルでは、役立つことができます:

what-is-jmx-mbean-jconsole-tutorial

+0

こんにちは!これをありがとうございました。私のbeanを登録するためのコードはどこに置くのですか? – user1870400

+0

アプリケーションのいくつかの場所で、おそらくメインの直後です。 – Troncador

+0

私はあなたの質問に答えていると感じたら、私の答えをチェックしてください:p – Troncador

関連する問題