VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。不比哪些收费的监控软件逊色多少。
VisualVM更棒的地方是在于它能通过安装插件来扩展功能。
看了上面的介绍,我忍不住心动了尝试了一下VisualVM 来分析一下JVM。既然有插件扩展更多的功能,那肯定要尝试一下,然而成功的道路总是充满曲折的。
安装插件过程中的遇到以下两个问题:
1. VisualVm 默认的插件中心的网址连不上去
这是因为Java VisualVM默认的插件中心网址已关闭服务,插件中心的服务器已经移交到github上,地址是https://visualvm.github.io/pluginscenters.html;
然后,在根据不同的JDK版本选择不同的插件地址。更改VisualVM插件中心的地址。
2. JDK1.7任然无法链接插件中心
我的电脑上安装了两个JDK,分别是JDK1.8和JDK1.7,再更改了正确的插件中心地址后,JDK1.8的VisualVM可以正常安装插件,然而JDK1.7却还是不行,链接时报了以下错误:
这就有点奇怪了。
在折腾了多次后,终于看到网上的一个说法:
JDK1.7默认支持TSL1.0,而JDK1.8默认支持TSL1.2
我们发现插件中心的网址正是https开头的,那我们对这个网址用Wireshark抓一下包
果然,插件中心的服务器上使用的正是TSL1.2的版本。那么解决方案有两种:
- 更改VisualVM的支持的TSL版本号,改成V1.2版本。
但好像找不到对应的设置。但可以使用系统属性来设置,看下面的代码。还有,在项目开发中也可能会遇到这个问题,那么同样也可以使用以下代码来指定JDK1.7的TSL版本号:System.setProperty("https.protocols", "TLSv1.2");
- 退回到http协议,用这种方法来解决此问题有点麻烦。经过一翻努力,发现所有插件的地址是由XML文件保持的,你还必须修改XML里面的每个插件下载地址成http,这意味着你必须那个下载XML文件,离线维护一个版本库,无法在线更新。但这也算一种解决方案,记录一下吧。