2012-02-16 4 views
3

jstatdを介してサーバー上で実行されているすべてのJavaプロセスを監視しようとしています。 VisualVMに接続して実行中のすべてのプロセスを確認できるだけの設定をしています。ほとんどのディスプレイは正常に動作しますが、特定のもの(特にCPU使用率やMBean)は表示されません。代わりに、それは言う:jstatdでMBeanを表示

のMBeanブラウザ

データJMXエージェントへのJMX接続を確立できなかったため利用できません。

私はこの問題は、アプリケーションがjstatd RMIレジストリではなく、地元の一方を介して「発表」しなければならないということだったと仮定したので、私は(these suggestionsあたりの)次のことを試してみたが、それはまだ表示されません。私が試したコードは次のとおりです。

public class JmxRmiConnectorTest { 
    public static void main(String[] args) throws Exception { 
     Registry rmiRegistry = LocateRegistry.createRegistry(9994); 
     String svc = 
      "service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector"; 

     MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); 

     JMXServiceURL url = new JMXServiceURL(svc); 
     RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer); 
     rmiServer.start(); 

     Thread.sleep(100000); 

     rmiServer.stop(); 
    } 
} 

どのように私はのjstatdを通して見たとき、私のMBeanとCPU使用率がVisualVMのに表示するために得ることができますか?

答えて

9

jstatdはJMXとは関係ありません。 JstatdはJvmstatのプロキシです。 MBeanとCPU使用率を取得するには、JMXも有効にする必要があります。詳細はJMX Remote Monitoring and Managementを参照してください。 VisualVMは、JMXを有効にすると、(jvmstatを介して)JMXも使用できることを自動的に検出し、jvmstatとJMXの両方のデータを1か所に表示します。

+0

私が投稿したコードを見ると、上記のRMIConnectorServer経由でJMXをエクスポートしています。だから私はその部分がカバーされていると思う。しかし、VisualVMはあなたが記述しているように自動的に接続を取得しません、そして、私はそれが間違っている場所を正確に把握しようとしています。ありがとう。 –

+1

これはうまくいくとは思わない。 VisualVMは、監視されたプロセスのコマンドライン引数に(jvmstatを介して)アクセスできるため、jvmstat経由でJMX接続を検出できます。上記で概説したプロセスを使用してください。アプリケーションに特別なコードを追加するよりも、いくつかのコマンドライン引数を設定する方がはるかに簡単です。 –

+0

これは鍵です.VisualVMは、コマンドラインパラメータの解析を介して接続する方法を理解しています。それはかなりばかげている。特定のネットワークインターフェイス(パブリックIPではなく10.xネットワーク)にバインドして攻撃経路を減らしたいので、カスタムエクスポータがあります。カスタム輸出業者と協力する方法はありますか? –

0

リモートでは、このようなjavaをenabl jmxremoteに起動します。

java -Dcom.sun.management.jmxremote \ 
    -Dcom.sun.management.jmxremote.port=9191 \ 
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.jmxremote.ssl=false \ 
    -Djava.rmi.server.hostname=`hostname` \ 
    -jar app.jar 

ロケールでは、jps YOUHOSTNAME:9191のようにjpsを使用します。

関連する問題