2011-01-28 12 views
0

JMXを使用してリモートJVMのスレッドにアクセスするにはどうすればよいですか?JMXを使用してリモートJVMのスレッドにアクセスするにはどうすればよいですか?

+0

それはどういう意味ですか? – skaffman

+1

最も簡単なもの:java.lang.management.ManagementFactory.getThreadMXBean() – bestsss

+1

java.lang.management.ManagementFactory.getThreadMXBean()でリモートホスト名はどこで指定できますか? – Zubair

答えて

2

これは非常に古いスレッドですが、私が探していたので、この質問に対する実際の答えを見つけたので、私はそれを投稿するかもしれません。

http://www.java2s.com/Code/Java/Development-Class/ThisFullThreadDumpclassdemonstratesthecapabilitytogetafullthreaddumpandalsodetectdeadlockremotely.htm

は、上記リモートJMX上のすべてのスレッドへのアクセスを取得する方法について非常に素晴らしい一例を示しています。あらすじで

// First connect to the remote service 
String urlPath = "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi"; 
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, urlPath); 
JMXConnector jmxc = JMXConnectorFactory.connect(url); 
MBeanServerConnection server = jmxc.getMBeanServerConnection(); 

// Then get all threads 
ThreadMXBean tmbean = newPlatformMXBeanProxy(server, THREAD_MXBEAN_NAME, ThreadMXBean.class); 
ObjectName tmbean = new ObjectName(THREAD_MXBEAN_NAME); 
long[] tids = tmbean.getAllThreadIds(); 
ThreadInfo[] tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE); 
for (ThreadInfo ti : tinfos) { 
    // do something with this particular thread... 
} 

アーロン・mciver @で疑問として、独自の監視ツールを書きたいために可能な必要性を強調します。スレッドには多くの情報が含まれており、ビジネスプロセスではスレッドが大量に発生する可能性があります。たとえば、VisualVMでそれらを目で見て調べることはできません。 特定のキーワード、CPU時間、スタックトレース、関連するファイル名などを探すために、スレッドをプログラム的にループするのは大変意味があります。

+0

なぜダウン投票ですか?答えはまさに尋ねられるものです:( –

1

なぜならjvisualvmはSDKの一部として提供され、他のものの中では特定のJVM内のスレッドにアクセスできるからです。

すでに存在するデバッグ機能を複製しようとしています。

+0

どのようにvisualVMを実行しますか?ヘッドレス環境? – bestsss

+0

jvisualvmでアプリケーションを遠隔監視することができます。探しているものが何であるのか、これがロードされた質問で何かが待っているのかどうかわからない...私の主張は、jvisualvmやjconsoleが提供するものを利用できるならば、すでに利用可能な情報を伝播するためにJMXフックを作成しないでください。 –

+0

ああ、私はそれを知らなかった。この情報を取得するには、JavaコードからVisualVMを呼び出すにはどうすればよいですか? – Zubair

関連する問題