4

JMX を使用して、職場のリモートCoherenceクラスタを監視するためのカスタム ツールを構築しています。問題なく接続して MBean を直接クエリすることができ、必要なほぼすべての情報を取得できました。ただし、クラスター内の特定のキャッシュについて MBean にクエリを実行しようとしたときに問題が発生しました。ここで、gets/puts の合計数、それぞれの平均時間などに関する統計を確認できます。

プログラムでアクセスしようとしている MBean は、JConsole を使用してリモート プロセスに接続すると表示され、次のような名前が付けられます。

Coherence:type=Cache,service=SequenceQueue,name=SEQ%GENERATOR,nodeId=1,tier=back

type=Cacheすべてのキャッシュを指定せずに、特定のノード ID のすべての MBean を動的に取得できれば、より柔軟になります。私は次のようにそれらを照会しようとしています:

QueryExp specifiedNodeId = Query.eq(Query.attr("nodeId"), Query.value(nodeId));
QueryExp typeIsCache = Query.eq(Query.attr("type"), Query.value("Cache"));
QueryExp cacheNodes = Query.and(specifiedNodeId, typeIsCache);
ObjectName coherence = new ObjectName("Coherence:*");
Set<ObjectName> cacheMBeans = mBeanServer.queryMBeans(coherence, cacheNodes);

ただし、queryMBeans()またはを使用するかどうかに関係なくqueryNames()、クエリは次を含むセットを返します...

  • ...上記の引数を渡すと0 個のオブジェクト
  • ...最初の引数に渡すと0 個のオブジェクトnull
  • ...第 2 引数Coherence:*に渡す場合、ドメイン内のすべての MBean (112)null
  • null...両方の引数を渡すと、すべての MBean (128)

最初の 2 つの結果は予期しないものQueryExpで、 I'm passに問題があることを示唆していますが、何が問題なのかわかりません。2 番目のパラメータに or を (typeIsCache最初のパラメータとしてorを使用して)渡してみましたが、常に 0 の結果が得られます。specifiedNodeIdcoherencenull

私は JMX にかなり慣れています — 問題が何であるかについての洞察はありますか? (参考までに、監視ツールは Java 5 で実行されるため、現時点では JMX 2.0 などは役に立ちません。)

4

2 に答える 2

4

後世のために私のソリューションを投稿したかっただけです...

私は、指定された特性に一致する MBean のセットを、より単純な (まだ見慣れない) 方法で正常に取得することができました。なぜこのQueryExpアプローチが機能しないのかはまだわかりませんが、機能するものは次のとおりです(質問の最後のコード行を置き換えます):

Set<ObjectName> cacheMBeans = mBeanServer.queryNames(new ObjectName("Coherence:type=Cache,nodeId="+nodeId+",*"), null);

また、ObjectNameコンストラクタ文字列にフラグメントservice=SequenceQueueを追加して、Coherenceサービス(キャッシュ)名でフィルタリングする場合にも機能します。

何らかの形で機能する限り、仕事をやり遂げるには十分ですが、これは JMX 実装の明らかな欠陥のようです。そして、JMX と RMI を使用して有効な JMXServiceURL を作成するプロセスを開始しないでください...

于 2009-07-22T17:55:14.453 に答える
1

私はあなたと同じ道をたどりました.JDKのドキュメントはもっと明確になると思います.

Query.* は、基礎となる MBean (つまり、実際の POJO ゲッター) の属性のみを照合できるように見えますが、ObjectName パターンは、ObjectName 自体内のキー/値と照合できます。

ObjectName ドメイン内でより複雑なクエリを実行できる柔軟性があると便利です。

于 2010-05-24T21:16:05.350 に答える