Java VisualVM 中的 Visual GC 通过 jstadt 用于远程 Tomcat

Posted

技术标签:

【中文标题】Java VisualVM 中的 Visual GC 通过 jstadt 用于远程 Tomcat【英文标题】:Visual GC in Java VisualVM via jstadt for remote Tomcat 【发布时间】:2013-08-28 13:56:32 【问题描述】:

我正在尝试使用 Java VisualVM 中的 Visual GC 可视化远程 Tomcat 的内存布局。 在运行 Tomcat jstatd 的 Linux 服务器上(包括 tools.policy 和正确的 [-J]-Djava.rmi.server.hostname=[SERVER_IP],可在Tomcat 的 jvm 选项也是如此)。 从 VisualVM 到 server/jstatd 的连接正常工作:

但我在 Jstatd 连接的 Visual GC 选项卡中看到的只是 Jstatd JVM 本身 的内存详细信息,而不是 Tomcat 的数据。编辑: 在 Tomcat 连接 (prod apl01 jmx) 的 Visual GC 选项卡中,有人告诉我:“此 JVM 不支持” 使用我们内部运行的系统进行测试,我在这里得到了正确的数据。

远程 Tomcat 使用它自己的用户“tomcat”运行。 jstatd 也必须由该用户启动吗? 还是我可能遗漏了另一个问题?

任何可行的替代方案,例如提供类似于以下可视化的其他可视化工具,都是绝对可以接受的。 我们也在使用 Yourkit,但我在其中找不到任何类似于 Visual GC 易于理解的样式。

【问题讨论】:

【参考方案1】:

在对我们的语言环境开发环境进行了更多研究和测试后,我意识到我们对生产环境没有正确的权限。 所以我要求管理员将 jstatd 添加到 sudoers 列表中,瞧,它按预期工作:

sudo /usr/java/latest/bin/jstatd -J-Djava.security.policy=/home/empulse/tools.policy -J-Djava.rmi.server.hostname=[SERVER_IP]

【讨论】:

【参考方案2】:

在远程服务器上创建策略,

vim /tmp/tools.policy

添加权限,

grant codebase "file:$java.home/../lib/tools.jar" 
   permission java.security.AllPermission;
;

并启动 jstatsd,

jstatd -J-Djava.security.policy=/tmp/tools.policy -J-Djava.rmi.server.hostname=<public_ip>

您已准备好在本地机器上的 VisualVM 中使用 Visual GC。

【讨论】:

以上是关于Java VisualVM 中的 Visual GC 通过 jstadt 用于远程 Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

Java 虚拟机原理垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )

Java VisualVM添加Visual GC插件

从 Eclipse 运行 Visual VM

Visual VM 垃圾回收性能监控开源插件, 支持Java 8和VisualVM 2.0

Java VisualVM 安装 Visual GC 插件图文教程

Java基础四张图轻松拿捏Java VisualVM添加Visual GC插件实现JVM性能调优