web-dev-qa-db-ja.com

jvisualvmが特定のJavaプロセスをリストしない

特定のJavaプロセスのヒープダンプ(メモリリークが疑われる)を取得したいのですが、jvisualvmツールを起動すると、実行中のJavaプロセス。

私はこれについてグーグルで調べており、jvisualvmツールを起動するのと同じJDKを使用してJavaプロセスを実行する必要があることを示すために、しかし、私が見る限り、これはすでに事実です。私はすべてをローカルで実行しています(マシンへのリモートアクセス権があります)。

考慮すべきいくつかのこと:

  1. プロセスはファイアウォールで保護されたWindows 2008サーバーで実行されています
  2. プロセスはJDKの名前変更バージョンを使用して実行されていますJava.exe実行可能ファイル
  3. 私が見る限り、プロセスは1.6.0_18 JDKを使用して実行されています
  4. 実行中のプロセスの1つがRMIレジストリを開始します

仮想化されたサーバーのコピーを待っているので、それをいじくりまわすことができます(これは運用サーバーです)。しかしその間、 jvisualvm(または、jconsole)でプロセスが表示されない理由に関するアイデアはありますか?

37
tmbrggmn

さて、少し調べてみたところ、ピーターのコメントは正しかったようです。 JVMプロセスは別のユーザーによって起動されたため(Windowsサービスによって開始されたため、ネットワークサービスアカウント)、jvisualvmに表示されませんでした。

Workaround

アプリケーション構成にアクセスできるため、次の回避策が見つかりました。これには、ターゲットJVMの非セキュアJMXを明示的に有効にすることが含まれます。

  1. 次のJVMパラメータを追加します。

    -Dcom.Sun.management.jmxremote.port=3333 -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.authenticate=false

  2. [ファイル]-> [JMX接続の追加]をクリックして、JMXを使用してリモートプロセスをjvisualvmに追加します。ポート3333を使用してプロセスに接続できます。必要に応じてポートを変更できます。

これをもう少し詳しく説明する記事へのリンクhttp://download.Oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections .html

ノート

  1. だれでもJMXを介してJVMに接続できるため、JVM設定を永続的に保持することは、おそらくnotといいでしょう。
  2. 必要に応じて、JMX JVMパラメータに認証を追加することもできます。
55
tmbrggmn

最も簡単な方法は、jvisualvm 管理者として(win: "管理者として実行")を実行することです。これは理想的ではありませんが、機能します。すべてのJavaプロセスが表示されます。

4
Wooff