VisualGC 到 docker 中的远程 JVM 运行
VisualGC to a remote JVM running in docker
例如,我从 Oracle documentation of VisualGC (and everything I found from SO on the subject, this question 了解到)当使用 VisualGC 连接到远程 JVM 时,需要 jstatd
服务器。
我的 JVM 是 运行 在 docker 容器中,而该容器中唯一的进程 运行 是 JVM,我希望保持这种状态,因为 best practice 用于容器。
有什么方法可以在 docker 中将 VisualGC(我的客户端是 VisualVM 的 VisualGC 插件)与 JVM 运行 一起使用?
只需在 docker 中与您的应用程序一起使用 jstatd
。我不认为它违反了 docker 的最佳实践。
VisualGC 和朋友通过 JMX 连接,通常通过端口 1099。因此,如果您将 Docker 容器设置为将 TCP 请求从 docker 容器内的端口 1099 传递到外部的可访问端口,那么您应该能够远程连接到那个。
这里是如何轻松做到这一点。
- 以这种方式在您的远程主机中启动 ejstatd(从 ejstatd 文件夹执行):
mvn exec:java -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
- 在您的远程主机上打开这 3 个端口并使它们可用于您的本地计算机:
1099
、1100
和 1101
- 使用本地计算机上的
jps
识别 运行 Java 应用程序的 <lvmid>
(将 <remotehost>
替换为您的远程主机名):jps -m -l rmi://<remotehost>:1099
- 您现在可以通过这种方式启动来使用
visualgc
(将 <lvmid>
和 <remotehost>
替换为正确的值):visualgc <lvmid>@<remotehost>:1099
免责声明:我是开源 ejstatd 工具的作者
例如,我从 Oracle documentation of VisualGC (and everything I found from SO on the subject, this question 了解到)当使用 VisualGC 连接到远程 JVM 时,需要 jstatd
服务器。
我的 JVM 是 运行 在 docker 容器中,而该容器中唯一的进程 运行 是 JVM,我希望保持这种状态,因为 best practice 用于容器。
有什么方法可以在 docker 中将 VisualGC(我的客户端是 VisualVM 的 VisualGC 插件)与 JVM 运行 一起使用?
只需在 docker 中与您的应用程序一起使用 jstatd
。我不认为它违反了 docker 的最佳实践。
VisualGC 和朋友通过 JMX 连接,通常通过端口 1099。因此,如果您将 Docker 容器设置为将 TCP 请求从 docker 容器内的端口 1099 传递到外部的可访问端口,那么您应该能够远程连接到那个。
这里是如何轻松做到这一点。
- 以这种方式在您的远程主机中启动 ejstatd(从 ejstatd 文件夹执行):
mvn exec:java -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
- 在您的远程主机上打开这 3 个端口并使它们可用于您的本地计算机:
1099
、1100
和1101
- 使用本地计算机上的
jps
识别 运行 Java 应用程序的<lvmid>
(将<remotehost>
替换为您的远程主机名):jps -m -l rmi://<remotehost>:1099
- 您现在可以通过这种方式启动来使用
visualgc
(将<lvmid>
和<remotehost>
替换为正确的值):visualgc <lvmid>@<remotehost>:1099
免责声明:我是开源 ejstatd 工具的作者