docker - VisualVM 无​​法连接到除 1099 以外的任何端口

标签 docker kubernetes jvm visualvm

我有一个远程 jvm 应用程序在 kubernetes 管理的 docker 容器中运行:

java -jar /path/to/app.jar
  -Dcom.sun.management.jmxremote  
  -Dcom.sun.management.jmxremote.authenticate=false
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.local.only=false
  -Dcom.sun.management.jmxremote.port=1099
  -Dcom.sun.management.jmxremote.rmi.port=1099
  -Djava.rmi.server.hostname=127.0.0.1 

当我尝试使用端口转发和 VisualVM 进行调试时,它仅在我在本地计算机上使用端口 1099 时有效。端口 1098、10900 或任何其他端口都不起作用。这个适用于 VisualVM:kubectl port-forward <pod-name> 1099:1099 . 这个没有: kubectl port-forward <pod-name> 1098:1099

我在 VisualVM 中使用“添加 JMX 连接”选项,连接到 localhost:1099localhost:1098 .前者有效,后者无效。

为什么我不能将非 1099 端口用于 VisualVM?

UPD 我认为这个问题与 VisualVM 有关,因为无论我选择什么本地端口,端口转发似乎都能正常工作:

$ kubectl port-forward <pod> 1098:1099
Forwarding from 127.0.0.1:1098 -> 1099
Forwarding from [::1]:1098 -> 1099
Handling connection for 1098
Handling connection for 1098

最佳答案

用于连接到 localhost 的完整 JMX URL如下:

service:jmx:rmi://localhost:<port1>/jndi/rmi://localhost:<port2>/jmxrmi

... where <port1>是导出 RMIServer 和 RMIConnection 远程对象的端口号,<port2>是RMI注册中心的端口号。

对于端口 1098你可以试试

service:jmx:rmi://localhost:1098/jndi/rmi://localhost:1098/jmxrmi

我猜这两个端口都默认为 1099如果没有明确配置。


编辑:根据评论,有效的 JMX URL 是:

service:jmx:rmi://localhost:1098/jndi/rmi://localhost:1099/jmxrmi

关于docker - VisualVM 无​​法连接到除 1099 以外的任何端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58977288/

相关文章:

docker - 将大文件添加到Docker构建中会导致EOF异常

elasticsearch - Packetbeat不添加Kubernetes元数据

java - 如何在 x64 操作系统上使用 JVM 客户端模式?

java - JAVA 8 中的 CMSMarkStackSizeMax 参数

c++ - 在运行的 JVM 中注入(inject) Jar 并替换类

java - Docker-无法访问jar文件

linux - 为什么 docker 中的拉取过程是这样的?

kubernetes - 使用外部域名集成外部服务时,OpenShift中的主机名验证失败

kubernetes - 如何连接 Kubernetes 上运行的 MySQL

r - 将特定版本的 R 添加到 docker 容器