2016-04-13 48 views
2

VisualVMをリモートホストに正常に接続した後、CPUパネルやシステムプロパティなどで "このJVMではサポートされません"スレッドダンプを行うために必要な「スレッド」パネルにアクセスできないようです。VisualVM上のリモートホストに接続しようとしたときに "このJVMでサポートされていません"

私は、JDK7とJDK8の両方からVisualVMの32ビット版と64ビット版を実行しようとしました(ターゲットプロセスは64ビットモードのLinuxマシン上で実行されています)。この問題は、VisualVM設定の両方のケースで同じように見えます。

これはjava -versionは、そのマシン上で私を取得するものである:

java version "1.7.0_55" 
Java(TM) SE Runtime Environment (build 1.7.0_55-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode) 

は、私は特別な考慮すべきものありますかリモートアクセスを行う制限のいくつかの種類がありますか?

+1

JMX APIの上に実装された機能だけが、リモートJVMで機能します。ローカルJVMの場合、VisualVMは添付のJVMに任意のコード/ Javaエージェントをロードできる[Attach API](https://docs.oracle.com/javase/7/docs/jdk/api/attach/spec/)を使用します。 – Holger

+0

JVMを削除するにはどうすれば接続できますか? JMXまたはjstatdを使用していますか? –

答えて

1

"このJVMではサポートされていません"と表示されたときにVisualVMを実行するために使用しているJVMを意味するものではありません。リモートサーバのVMを意味します。

VisualVMが正常に動作しない場合は、おそらく非Oracle VM(openjdk)が実行されている可能性があります。サーバー上のOracleのJREに変更するか、OpenJDKも処理できるプロファイラを入手してください。

+0

ああ、私はそれが来るのを見なかった。私はそれを確認します。 –

+0

実際、それは当面の問題ではないようです。編集されたOPを参照してください。 –

+0

私はjmapとjstackを実行しようとしましたが、 "操作が許可されていません"ということがあります。私はこれがすべてパーミッションに関連していると思い始めていますか? –

0

リモートJVMに接続すると、VisualVMは通常、スレッドなどを取得するためにJMXインターフェイスを介して話します。ただし、リモートJVMは、デフォルトで利用可能なものすべてではなく、クライアントが利用できるものを決定します。接続しているJVMがこれらの特性に関するレポートをサポートしていない可能性があります。

接続が正常に動作すると仮定すると、さまざまなisXxxSupportedメソッドがJVMから返されます(この場合はおそらくfalse)。あなたは試してみたいことがあります

ことの一つは、そのユーザとして他のVMを見てからあなたを妨げているボックス内のプロセス上の制約のいくつかの種類がありますかどうかを確認するために、リモートサーバ(またはjps)上jcmdを実行することです。コンテナのようなもので動作していて、JMXのRMI呼び出しが通過していない場合や、selinuxまたはJavaセキュリティポリシーで実行している場合に、ネットワークポートまたはファイル。

JMXServiceURL url = new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi"); 
JMXConnectionFactory factory = JMXConnectorFactory.connect(url); 
MBeanSearverConnection conn = factory.getMBeanServerConnection(); 
ThreadMXBean threads = ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.THREAD_MXBEAN_NAME,ThreadMXBean.class); 
long ids[] = threads.getAllThreadIds(); 

あなたがスレッドIDを取得することができた場合、それはあなたがサーバーに話すことができます示唆しています。 threadsには、スタックトレースなどを取得するための他の方法があります。これはVisualVMで使用される方法であり、応答で何がうまくいかないかについてさらにデバッグすることができます。

+0

あなたのコードはJMX接続の作成方法を示していますが、これはJVMTIとは関係ありません。 OPはリモートJVMに接続できるため、JMXが機能します。 – Holger

+0

あなたは正しいです - 申し訳ありませんが、JVMXリファレンスをJMXに修正しました。問題は、リモートJVMがスレッドを取得するかどうかをサポートしているかどうかの問題の1つでした。これは、VisualVMがカバーしていることです。このコードは、JMX接続を行うことができるかどうかだけではなく、アクセス権の問題などを特定するのに役立ちます。 – AlBlue

関連する問題