Java Mission Control:飞行记录器抛出:javax.naming.ServiceUnavailableException

Posted

技术标签:

【中文标题】Java Mission Control:飞行记录器抛出:javax.naming.ServiceUnavailableException【英文标题】:Java Mission Control: Flight Recorder throws: javax.naming.ServiceUnavailableException 【发布时间】:2014-09-01 10:32:08 【问题描述】:

我正在尝试使用 Oracle Java Mission control 分析 Java Spring 应用程序。 我将 JVM 连接配置为:localhost:7091 我用java -Dcom.sun.management.jmxremote.rmi.port=7091 -jar app.jar启动了应用程序。

当我尝试启动飞行记录器时,我收到一条错误消息。

Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused: connect]
Could not connect to a JVM at service:jmx:rmi:///jndi/rmi://localhost:7091/jmxrmi. Make sure one is running and that you are using the correct protocol in the Service URL.

有谁知道这个错误的原因是什么?

【问题讨论】:

我知道这已经过时了,但对于任何研究此问题的人来说,如果您将主机名从 localhost (127.0.0.1) 更改为外部 IP 地址(通常为 192.168.X.X),它就可以工作。如果您从其他主机访问,还要检查防火墙 (ufw) 和路由器。 【参考方案1】:

您可以尝试使用自动发现。然后连接会自动显示在 JMC 中

-Dcom.sun.management.jmxremote.autodiscovery=true

您还可以命名连接,以便轻松识别它。

-Dcom.sun.management.jdp.name=App

并禁用安全性

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

【讨论】:

【参考方案2】:

我遇到了这个问题。我已经在 Windows Server 2016 上安装了 JDK 10。我希望使用 JMC 和 JVM 在同一台服务器上进行监控。

上线时,我们将 IP 从临时 IP 切换为实时 IP。但是,江铃将localhost解析为原IP。此外,在指定服务器的当前 IP 时,JMC 将其解析为原始 IP。

-Djava.rmi.server.hostname=localhost添加到我想要监控的Java进程中,解决了这个问题。

但是,我仍然想知道为什么 JMC(或 RMI)仍然无法正确解析。

【讨论】:

-Djava.rmi.server.hostname=<ip-address> 添加到 Java 进程解决了该问题。

以上是关于Java Mission Control:飞行记录器抛出:javax.naming.ServiceUnavailableException的主要内容,如果未能解决你的问题,请参考以下文章

Java Mission Control Flight Recorder 中没有记录 CPU 使用情况

深入理解java虚拟机(十三)Java Mission Control:可持续在线的监控工具

Java Mission Control 空格是啥意思?

Java Mission Control - 访问被拒绝连接到远程

仍然可以使用 Java Mission Control 连接到远程 JMX 但证书已过期?

使用 Tanzu Mission Control 部署具有额外数据卷的 Tanzu Kubernetes 集群