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

Nei*_*man 6 java service jmx windows-7

我们有一个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进程?

Rob*_*ola 1

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

运行 SysInternalspsexec -s -i <jdk_home>\bin\jconsole <PID>可用于以本地系统身份运行 jconsole,我相信您正在使用该用户来运行服务。

我以系统用户身份在 Server 2008 中从 JDK 1.5 运行 jconsole 的经验并不成功。凭借我认为应该足够的权限,我收到了无法打开 PerfMemory 错误。Java 1.6 可能是一个不同的故事。

鉴于在本地运行 jconsole 的所有挑战,您可能会更幸运地将其设置为接受远程连接。您可以将其设置为仅限本地访问,并使用防火墙阻止该端口进行外部访问。