我从Oracle的documentation VisualGC(以及我在SO上发现的所有内容,例如此question)了解到,在使用时需要jstatd
服务器VisualGC连接到远程JVM。
我的JVM在docker容器中运行,并且在该容器中运行的唯一进程是JVM,我希望保持这种方式,就像容器的best practice一样。
有什么方法可以使用VisualGC(我的客户端是VisualVM的VisualGC插件)和在docker中运行的JVM吗?
答案 0 :(得分:1)
以下是如何轻松完成此任务。
mvn exec:java -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
1099
,1100
和1101
<lvmid>
标识正在运行的Java应用程序的jps
(将<remotehost>
替换为您的远程主机名):jps -m -l rmi://<remotehost>:1099
visualgc
(使用正确的值替换<lvmid>
和<remotehost>
):visualgc <lvmid>@<remotehost>:1099
免责声明:我是开源ejstatd工具的作者
答案 1 :(得分:0)
只需在您的应用程序中使用docker中的jstatd
即可。我不认为这违反了码头工人的最佳做法。
答案 2 :(得分:0)
VisualGC和朋友通过JMX连接,通常通过端口1099连接。因此,如果您设置Docker容器以便将来自docker容器内端口1099的TCP请求传递到外部的可访问端口,那么您应该能够连接到远程的。