VisualGC到在docker中运行的远程JVM

时间:2016-02-12 08:32:18

标签: java oracle docker jvm visualvm

我从Oracle的documentation VisualGC(以及我在SO上发现的所有内容,例如此question)了解到,在使用时需要jstatd服务器VisualGC连接到远程JVM。

我的JVM在docker容器中运行,并且在该容器中运行的唯一进程是JVM,我希望保持这种方式,就像容器的best practice一样。

有什么方法可以使用VisualGC(我的客户端是VisualVM的VisualGC插件)和在docker中运行的JVM吗?

3 个答案:

答案 0 :(得分:1)

以下是如何轻松完成此任务。

  1. 以这种方式在远程主机中启动ejstatd(从ejstatd文件夹执行):mvn exec:java -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
  2. 打开远程主机上的3个端口,并将其提供给本地计算机:109911001101
  3. 使用本地计算机上的<lvmid>标识正在运行的Java应用程序的jps(将<remotehost>替换为您的远程主机名):jps -m -l rmi://<remotehost>:1099
  4. 您现在可以通过这种方式启动visualgc(使用正确的值替换<lvmid><remotehost>):visualgc <lvmid>@<remotehost>:1099
  5. 免责声明:我是开源ejstatd工具的作者

答案 1 :(得分:0)

只需在您的应用程序中使用docker中的jstatd即可。我不认为这违反了码头工人的最佳做法。

答案 2 :(得分:0)

VisualGC和朋友通过JMX连接,通常通过端口1099连接。因此,如果您设置Docker容器以便将来自docker容器内端口1099的TCP请求传递到外部的可访问端口,那么您应该能够连接到远程的。