2011-01-12 18 views
6

Windowsサービス(srvanyを使用)として実行するJavaプロセスがあります。これはJava 1.6(現時点では1.6.0.23)で動作します。JconsoleはWindows 7サービスとして実行されているjavaプロセスに接続できません

以前は(Windows XP)、JConsoleをプロセスに接続することができましたが、Windows 7ではもうこれを行うことはできません。

jconsole <pid>を実行すると、「無効なプロセスID:4488」が表示されます。サービスはSYSTEMユーザーとして実行されています。

「このアカウントとしてログオンする」を使用してサービスをデスクトップユーザーとして実行すると、サービスプロセスIDはJConsoleに表示されますが、グレー表示されて接続できません。

JavaプロセスがWindows 7サービスとして実行されているときに、Javaプロセスに動的に接続することはできませんか?

+0

あなたのJAVAサービスはJMXに設定できますか? – nIKUNJ

+0

JMXを有効にするために特別なことは何もしていませんが、デフォルトでは(コマンドラインで実行されたときに1.6で確認されています)、Windows XPで動作します。 –

+0

OK、JMXが有効になっている場合は、サービスをJMXのURLとポートに接続します。接続する必要があります。 – nIKUNJ

答えて

1

他にもrun jstack on 2008r2があります。これはWindows 7でjconsoleを接続する方法についていくつかの洞察を提供するかもしれません。あなたのコメントに記載されているように、権限は重要です。サービスとjconsoleがtempディレクトリにアクセスして適切なhsperfサブディレクトリに書き込めない場合は、動作しません。重要なのは、一時ディレクトリの場所、サービスが実行されているユーザー、およびjconsoleを実行しているユーザーです。

Running SysInternals psexec -s -i <jdk_home>\bin\jconsole <PID>は、ローカルシステムとしてjconsoleを実行するために使用できます。これは、あなたがサービスを実行するために使用しているのと同じユーザーです。

システムユーザーとしてServer 2008のJDK 1.5からjconsoleを実行した経験はありませんでした。十分なはずだったパーミッションを使って、PerfMemoryエラーを開くことができませんでした。 Java 1.6は別の話かもしれません。

jconsoleをローカルで実行する際のすべての課題に照らして、setting it up to accept remote connectionsの方がよいでしょう。あなたは、ファイアウォールがそのポートを外部アクセスからブロックすることで、ローカルオンリーアクセスのために設定することができます。

+0

私はこれともっと多くのテストを試しました。 jconsoleをadmin、systemとして実行し、自分のユーザーとして実行するようにサービスを変更するなど、常に失敗します。すべての場合にhsperfdata_usernameが正しく作成されているようです。 –

+0

今日私は PsExec.exe -s "C:¥Program Files¥Java¥jdk1.6.0_13¥bin¥jstack.exe" 12345とjmap.exeの両方がjvisualvmではなく動作するようになっています。 –

0

私は現在、Windows 2003 R2(SP2)でも同じ問題に直面しています。 Oracle Bugデータベースにオープンバグがあります(バグID 6399729) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399729

また、最後に回避策があります。それは "インストール"モードでJavaをインストールすることについて話します:-)、しかしWindows 2003では私のために働いていませんでした。しかし、あなたの走行距離は変わるかもしれません!

+0

このバグは、リモートデスクトップ経由でのjconsoleの使用に特有のようです。 –

+0

Mac OS X RDPツールを使用して/コンソールを使用するための関連する回答をリンクする。これは最終的に私のために働く。 http://serverfault.com/questions/114548/mstsc-admin-for-microsofts-rdp-for-mac-os-x –

+0

jvisualvmが上記の環境で動作しないことがあります。ここで言及した回避策はうまくいくようです。http://stackoverflow.com/questions/8912831/how-do-you-run-jvisualvm-exe-under-the-local-system-account-under-windows-server?rq=1 –

3

恐らく32ビットJDKをダウンロードした後、64ビットJDKから64ビットJDKのWindows 7 64ビットからJConsoleで開くことができない32ビットJDKでコンパイルされたアプリケーションがいくつかあります。

+0

私のシステムには32ビットJavaしかありません。まだ64ビットが必要です。私は64ビットのJavaで試してみることができます。 –

+0

xuさん、ありがとう、これは私の問題の解決策でした。 –

+0

@Mongoは、Windowsサービスとして実行しているJavaプロセスですか? –

0

リモートセッションをconnecetし、その後JAVA_OPTION

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8086 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

に 使用JConsoleを次の行を追加します。 はlocalhost:8086

+0

私はそれを試みました。それは助けにはならない。 –

0

変更環境変数TEMPとTMPをあなたが作成した別のフォルダに。 c:¥theTemp

関連する問題