docker - VisualVM 无法连接到除 1099 之外的任何端口
问题描述
我有一个远程 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:1099
或localhost: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
解决方案
用于连接的完整 JMX URLlocalhost
如下:
service:jmx:rmi://localhost:<port1>/jndi/rmi://localhost:<port2>/jmxrmi
...其中 <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
推荐阅读
- python - 如何组合在一列中具有相同值的熊猫数据框中的行
- c# - 使用 Twilio 从出站呼叫中收集用户输入
- swift - SwiftUI:从列表中删除的行不断重新出现
- sql - 如何比较Oracle和SQL Server之间的大表(亿行)数据
- php - 将服务器从 php 5.6 更新到 7.3,出现 PEAR 错误
- gradle - Gradle 插件开发:解决工具伪影的惯用方法
- python - 如何解决 pygsheets 的授权错误?
- php - 我如何制作中间件来控制没有 id ln Laravel 7 项目的无人进入页面
- jpa - 数据库中的更改未反映在 JPA 实体中
- restore - 如何创建自动化和无人值守的 Clonezilla 恢复解决方案