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

问题描述 投票:0回答:7

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

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

如果我运行

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

如果我以桌面用户身份运行该服务(使用“以此帐户登录”),服务进程 ID 会出现在 JConsole 中,但它们呈灰色,我无法连接。

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

java service windows-7 jmx
7个回答
3
投票

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


1
投票

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

运行 SysInternals

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

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

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


1
投票

将以下内容添加到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


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 上对我不起作用。但您的里程可能会有所不同!!


0
投票

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


0
投票

可能是文件夹的问题

%TMP%/hsperfdata_{USER_NAME}
。 就我而言,它在我之后起作用了:

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

希望有帮助。您还可以在 Oracle 社区中查看此主题。


0
投票

对于可能在 2023 年遇到此问题的其他人来说,好消息是:可能很简单,只需在运行之前以“管理员身份”运行命令提示符即可。

我发现在尝试连接到作为服务运行的jvm(如Neil)时出现此错误(“

jconsole <pid>

”,在jconsole的弹出屏幕中)(并且将“登录为”值设置为“本地系统”)。只需以管理员身份打开 cmd 提示符即可让 jconsole(和其他 JVM 工具)正常工作。

FWIW,请注意,如果您不使用 pid 参数,您将不会在“本地进程”连接选项卡中看到该进程(即使您提供它,也可以连接到它)。当然,如果您在 jvm 中启用 JXM args,那么您可以使用“远程进程”选项卡访问它。

我意识到这是一个非常古老的问题,当 Neil 在 2011 年第一次写这个问题时,情况可能有所不同。但我提供它,以防它对其他可能在这里找到问题的人有所帮助。我已经用 Java 8、11 和 17 确认了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.