Play Framework (2.5) - JMX port enable to see in JVisualVM

Posted

技术标签:

【中文标题】Play Framework (2.5) - JMX port enable to see in JVisualVM【英文标题】: 【发布时间】:2017-10-01 16:47:45 【问题描述】:

我正在尝试查看 Play 应用程序的线程管理。需要使用 JVisualVm 来查看正在运行的线程。基本上,应该启用 JMX 端口以查看 Play 应用程序。我正在使用带有 Activator 的 Play 2.5。使用 acivator run 命令运行应用程序并在 build.sbt 文件中配置 Java Args,如下所示。

javaOptions ++= Seq(
   "-Dcom.sun.management.jmxremote",
   "-Dcom.sun.management.jmxremote.port=5678",
   "-Dcom.sun.management.jmxremote.local.only=false",
   "-Dcom.sun.management.jmxremote.ssl=false",
   "-Dcom.sun.management.jmxremote.authenticate=false",
   "-Djava.rmi.server.hostname=192.11.1.18"
)

但是上面的配置没有任何效果。任何人都可以帮助我吗?

【问题讨论】:

JVisualVM 在尝试连接时究竟会告诉您什么? 【参考方案1】:

JMX 客户端无法连接到您的服务器的原因可能是防火墙拒绝连接到默认随机分配的com.sun.management.jmxremote.rmi.port,因此为方便起见,您可以将其显式设置为与com.sun.management.jmxremote.port 相同的值。

另一个原因可能是java.rmi.server.hostname 的值错误,它必须与您使用浏览器访问应用程序时使用的 IP 地址相同。

因此,您的配置可能如下所示:

javaOptions += "-Dcom.sun.management.jmxremote"
javaOptions += "-Dcom.sun.management.jmxremote.port=5678"
javaOptions += "-Dcom.sun.management.jmxremote.rmi.port=5678"
javaOptions += "-Dcom.sun.management.jmxremote.local.only=false "
javaOptions += "-Dcom.sun.management.jmxremote.ssl=false"
javaOptions += "-Dcom.sun.management.jmxremote.authenticate=false"
javaOptions += "-Djava.rmi.server.hostname=192.11.1.18" // make sure it's your app's web address

如果没有任何帮助,请参阅VisualVM Troubleshooting Guide。

还可以查看以下资源以获取有关类似问题的更多信息(它们是关于 docker,但本质上与使用 jmc 连接到远程主机相同):

How to connect with JMX from host to Docker container in Docker machine?

Remote Java Debugging With Docker

【讨论】:

以上是关于Play Framework (2.5) - JMX port enable to see in JVisualVM的主要内容,如果未能解决你的问题,请参考以下文章

java 如何使用Play Framework 2.5测试具有多部分数据的路径

Play Framework 2.5 sbt-fork-run-plugin;2.5.1: not found

从 Play Framework 更改 WS API! 2.4 至 2.5

如何使用 play framework 2.5 代理 HTTP 方法?

Play Framework (2.5) - JMX port enable to see in JVisualVM

Play Framework 2.5,到 Web 套接字的路由无法编译