2011-01-12 5 views
6

Wir haben einen Java-Prozess, den wir als Windows-Dienst ausführen (mit srvany). Es läuft mit Java 1.6 (1.6.0.23 im Moment).Jconsole kann keine Verbindung zu Java-Prozessen herstellen, die als Windows 7-Dienste ausgeführt werden

In der Vergangenheit (Windows XP) konnte ich JConsole mit den Prozessen verbinden, unter Windows 7 kann ich das nicht mehr tun.

Wenn ich jconsole <pid> ausführen bekomme ich "Invalid Prozess ID: 4488". Die Dienste werden als SYSTEM-Benutzer ausgeführt.

Wenn ich den Dienst als Desktop-Benutzer ausführen lasse (mit "Als Konto anmelden"), wird die Dienstprozess-ID in JConsole angezeigt, aber sie sind ausgegraut und ich kann keine Verbindung herstellen.

Ist es nicht möglich, sich dynamisch mit Java-Prozessen zu verbinden, wenn sie als Windows 7-Dienst ausgeführt werden?

+0

Ist Ihr JAVA-Dienst auf JMX konfigurierbar? – nIKUNJ

+0

I dont specific nichts extra um JMX zu aktivieren, standardmäßig (mit 1.6 und bestätigt, wenn in der Befehlszeile ausgeführt) funktioniert es und es funktionierte mit Windows XP. –

+0

Ok, Wenn JMX aktiviert ist, dann verbinden Sie den Dienst mit JMX URL und Port. Es sollte sich verbinden. – nIKUNJ

Antwort

1

Andere konnten run jstack on 2008r2, die einige Einblicke geben, wie Sie jconsole zum Verbinden unter Windows 7 erhalten. Wie Sie in Ihrem Kommentar notiert haben, sind die Berechtigungen wichtig. Wenn der Dienst und die Jconsole nicht auf das temporäre Verzeichnis zugreifen können, um in das entsprechende Unterverzeichnis hsperf zu schreiben, funktioniert es nicht. Wichtig ist auch der Speicherort des temporären Verzeichnisses, des Benutzers, auf dem der Dienst ausgeführt wird, und des Benutzers, der jconsole ausführt.

Das Ausführen von SysInternals psexec -s -i <jdk_home>\bin\jconsole <PID> kann verwendet werden, um jconsole als lokales System auszuführen, derselbe Benutzer, von dem Sie meinen, dass er Ihren Dienst ausführt.

Meine Erfahrung beim Ausführen von Jconsole von JDK 1.5 in Server 2008 als Systembenutzer war nicht erfolgreich. Mit Berechtigungen, von denen ich dachte, dass sie ausreichen sollten, habe ich einen Fehler "PerfMemory nicht öffnen" erhalten. Java 1.6 könnte eine andere Geschichte sein.

Angesichts all der Herausforderungen mit lokal jconsole laufen, hätten Sie wahrscheinlich mehr Glück setting it up to accept remote connections. Sie können es für den lokalen Zugriff einrichten, wobei Ihre Firewall diesen Port für den externen Zugriff blockiert.

+0

Ich habe diese und viele weitere Tests ausprobiert. Laufen jconsole als admin, System und das Ändern des Dienstes, um als mein Benutzer usw. zu laufen, und es schlägt immer fehl. Es scheint, dass hsperfdata_username in allen Fällen korrekt erstellt wird. –

+0

Heute habe ich PsExec.exe -s "C: \ Programme \ Java \ jdk1.6.0_13 \ bin \ jstack.exe" 12345 und jmap.exe beide zu arbeiten, aber nicht jvisualvm. –

0

Ich habe derzeit das gleiche Problem, aber auf Windows 2003 R2 (SP2). Es gibt einen offenen Fehler in Oracle Bug-Datenbank (Bug-ID 6399729) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399729

Auch gibt es eine Work-Around gegen Ende gebucht. Es geht um die Installation von Java im "Install" -Modus :-), funktionierte aber unter Windows 2003 nicht für mich. Aber Ihre Laufleistung kann variieren !!

+0

Der Fehler scheint spezifisch für die Verwendung von jconsole über Remote Desktop zu sein. –

+0

Verknüpfen einer zugehörigen Antwort für die Verwendung von/console mit dem Mac OS X RDP-Tool. Das funktioniert schließlich für mich. http://serverfault.com/questions/114548/mstsc-admin-for-microsofts-rdp-for-mac-os-x –

+0

Manchmal kann jvisualvm nicht in der oben genannten Umgebung ausgeführt werden. Work around erwähnt hier scheint http://stackoverflow.com/questions/8912831/how-do-you-run-jvisualvm-exe-under-the-local-system-account-under-windows-server?rq=1 –

3

Vielleicht ist es ein 64bit/32bit Problem, ich habe mehrere Anwendungen mit 32bit JDK kompiliert, die nicht mit JConsole von 64bit JDK unter Windows 7 64bit geöffnet werden konnte, nachdem ich das 32bit JDK heruntergeladen hatte, funktionierte es.

+0

Ich habe nur 32-Bit-Java auf meinen Systemen. Wir brauchen noch 64 Bit. Ich kann es mit einem 64-Bit-Java versuchen. –

+0

Danke xu, das war die Lösung für mein Problem. –

+0

@Mongo wurde Ihr Java-Prozess als Windows-Dienst ausgeführt? –

0

Fügen Sie den folgenden zu JAVA_OPTION

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

Dann Verwenden JConsole Remote-Sitzung connecet: localhost: 8086

+0

Ich habe das versucht. Es hilft nicht. –

0

ändern Umgebungsvariable TEMP und TMP in einen anderen Ordner, den Sie erstellt. Wie c: \ theTemp