【问题标题】:VisualVM cannot connect to any port except for 1099VisualVM 无​​法连接到除 1099 之外的任何端口
【发布时间】:2019-11-21 14:29:40
【问题描述】:

我有一个远程 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。前者有效,后者无效。

为什么我不能在 VisualVM 中使用非 1099 端口?

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

【问题讨论】:

  • 能把jvm应用部署贴在k8s上吗?还是kubectl describe deployment &lt;jvm_deployment_name&gt;
  • @Crou 有没有你感兴趣的特定部分?不幸的是,我无法分享完整的部署描述,但我看到几乎所有参数都是特定于应用程序的,既没有提到端口也没有提到网络,也没有提到这些方面的任何内容
  • 部署中是否提到了端口 1098 和 10900?您是否通过服务公开了这些端口?
  • @Crou 不,那里没有提到任何端口。也没有 1099
  • 那么1099端口转发是如何工作的呢?这很奇怪。

标签: docker kubernetes jvm visualvm


【解决方案1】:

连接localhost的完整JMX URL如下:

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

...where &lt;port1&gt; 是导出 RMIServer 和 RMIConnection 远程对象的端口号,&lt;port2&gt; 是 RMI 注册表的端口号。

1098 端口你可以试试

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

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


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

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

【讨论】:

  • 几乎!这一个有效:service:jmx:rmi://localhost:1098/jndi/rmi://localhost:1099/jmxrmi(第二个是 1099)。非常感谢!
  • 很高兴它做到了 :-) 我将编辑答案以包含适合您的 JMX URL。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多