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 内存 )
Visual VM 垃圾回收性能监控开源插件, 支持Java 8和VisualVM 2.0