VisualGC到docker中运行的远程JVM
我从Oracle的VisualGC 文档 (以及我从这个主题find的所有东西,例如这个问题 )的文档中了解到,当使用VisualGC连接到远程JVM时,需要使用jstatd
服务器。
我的JVM运行在Docker容器中,运行在该容器中的唯一进程就是JVM,我希望这样保持容器的最佳实践 。
有没有什么办法可以使用VisualGC(我的客户端是VisualVM的VisualGC插件)与在Docker中运行的JVM?
这是如何轻松做到这一点。
- 以这种方式在远程主机上启动ejstatd (从ejstatd文件夹执行):
mvn exec:java -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
- 在远程主机上打开这3个端口,并将它们提供给本地机器:
1099
和1101
- 使用本地机器上的
jps
识别正在运行的Java应用程序的<lvmid>
(使用远程主机名replace<remotehost>
):jps -m -l rmi://<remotehost>:1099
- 你现在可以通过启动它来使用
visualgc
(用正确的值replace<lvmid>
和<remotehost>
):visualgc <lvmid>@<remotehost>:1099
免责声明:我是开源ejstatd工具的作者
只需在jstatd
中将jstatd
与您的应用程序一起使用即可。 我不认为这违反了docker的最佳做法。
VisualGC和朋友通过JMX连接,通常通过1099端口连接。所以,如果你设置你的Docker容器来通过docker容器内端口1099的TCP请求传递到外部可访问的端口,那么你应该能够远程连接到它。