Jconsole无法连接到作为Windows 7 Services运行的java进程

时间:2011-01-12 13:16:13

标签: java service windows-7 jmx

我们有一个Java进程,我们作为Windows服务运行(使用srvany)。它运行Java 1.6(目前为1.6.0.23)。

过去(Windows XP),我可以将JConsole连接到进程,在Windows 7上我不能再这样做了。

如果我运行jconsole <pid>,我会收到“无效的进程ID:4488”。这些服务以SYSTEM用户身份运行。

如果我将服务作为桌面用户运行(使用“以此帐户登录”),服务进程ID将显示在JConsole中,但它们将显示为灰色且无法连接。

当它们作为Windows 7服务运行时,是否无法动态连接到Java进程?

6 个答案:

答案 0 :(得分:3)

也许这是一个64位/ 32位的问题,我有几个用32位JDK编译的应用程序,在我下载了它工作的32位JDK后,无法用Windows 7 64bit上64位JDK的JConsole打开。

答案 1 :(得分:1)

其他人已经能够run jstack on 2008r2,它可以提供一些有关如何在Windows 7上连接jconsole的见解。正如您在评论中指出的那样,权限很重要。如果服务和jconsole无法访问临时目录以写入相应的hsperf子目录,则它将无法工作。同样重要的是临时目录的位置,服务运行的用户以及运行jconsole的用户。

运行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。您可以将其设置为仅限本地访问,防火墙阻止该端口进行外部访问。

答案 2 :(得分:0)

我目前面临同样的问题,但在Windows 2003 R2(SP2)上。 Oracle Bug数据库中有开放的bug(bug id 6399729) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399729

此外还有最后的解决方案。它讨论了在“安装”模式下安装java :-),但在Windows 2003上并不适用于我。但你的里程可能会有所不同!!

答案 3 :(得分:0)

将以下内容添加到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连接远程会话: 本地主机:8086

答案 4 :(得分:0)

将环境变量TEMP和Tmp更改为您创建的其他文件夹。 像c:\ theTemp

答案 5 :(得分:0)

文件夹%TMP%/hsperfdata_{USER_NAME}可能有问题。 就我而言,它在我之后有效:

  • 关闭所有通过JVM运行的应用程序
  • 删除文件夹%TMP%/hsperfdata_{USER_NAME}(例如C:/Temp/hsperfdata_MyUser
  • 重新打开JConsole(它将重新创建文件夹)

希望有帮助。您还可以在Oracle community中查看此线程。