其他分享
首页 > 其他分享> > JVisualVM的使用教程

JVisualVM的使用教程

作者:互联网

## 一、前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢? 在JDK1.6后的版本是自带这个工具,它就在你的jdk的bin目录上 ![image-20210528192339675](https://www.icode9.com/i/ll/?i=img_convert/7fd80c753534c763f1e662879e5285c2.png) 如果是默认安装的JDK,一般就在C盘,Program Files的java目录,就会看到你的jdk版本,点进去之后打开bin这个文件夹,就可以看到这个软件了 ## 二、启动JVisualVM 启动方法: 1.进入jdk安装目录的bin目录,双击打开这个程序 2.菜单键+R,输入cmd进入命令行模式,输入命令`jvisualvm` 启动程序。注:要是使用命令行启动的软件,命令框可不能关闭哦,关闭了的话JVisualVM也会被关闭,切记切记!!! ![image-20210529021530180](https://www.icode9.com/i/ll/?i=img_convert/6f33eccea869abe3a5b337179e4ee8eb.png) ![image-20210529021654563](https://www.icode9.com/i/ll/?i=img_convert/4a58e68d6c0fbae7dcccf1c89c27cdd1.png) 启动程序之后进入这个界面,这个就是JVisualVM的使用界面了 ![image-20210528193420711](https://www.icode9.com/i/ll/?i=img_convert/ff0df6751c41b7c1e6a04e247ae84df0.png) ## 三、安装插件 使用之前,我们需要安装一个插件,来更好的来观察虚拟机的性能,点击上方的工具-插件 ![image-20210529022800418](https://www.icode9.com/i/ll/?i=img_convert/aab711aaf467b6169a90f958d402cc25.png) 在可用插件那里选择下载,安装一个VIsual GC的插件 ![image-20210529022846764](https://www.icode9.com/i/ll/?i=img_convert/eed383273535d68807da30f3b505eebd.png) 一般会报错,因为默认的链接已经给转移了,需要在设置那里把默认的链接更改 点击设置,编辑,把URL更改一下 ![image-20210529024936028](https://www.icode9.com/i/ll/?i=img_convert/4134e6e4e7e1b109f0b6e7b89a122b40.png) ![image-20210529025149446](https://www.icode9.com/i/ll/?i=img_convert/968dc02cf3d88989a7866cc398def59b.png) 那URL填什么呢?先确定一下自己的jdk版本号,然后用以下链接去查看URL 确认版本号,可以菜单键+R,执行cmd,输入`java -version`来查看自己的版本号 ![image-20210529025343765](https://www.icode9.com/i/ll/?i=img_convert/2860ef55f20620c666104df07abfe6a4.png) 比如我的是201 那就在这个网站(https://visualvm.github.io/pluginscenters.html)上,找到自己版本号的地址,复制URL到设置那里 ![image-20210529025607753](https://www.icode9.com/i/ll/?i=img_convert/12bc307391784cc2850e89fa0207e05c.png) 比如我的是JDK8的201,所以应该是131-291之间,所以我就复制下面那行蓝色的URL到设置的定制器中 ![image-20210529025821405](https://www.icode9.com/i/ll/?i=img_convert/20c6cea05d756c0a1175f4976fdf33ca.png) 然后就可以下载想要的插件啦 ![image-20210529025950834](https://www.icode9.com/i/ll/?i=img_convert/1a7a790fb3081f773b5ab4fd9980e5e9.png) 然后重启一下即可看到有visual GC这个选项了 ![image-20210529030154587](https://www.icode9.com/i/ll/?i=img_convert/7219be7e9c63f7318d1b7a0472041bb9.png) ## 四、使用 那我先执行一个不停止的程序 ![image-20210529030350237](https://www.icode9.com/i/ll/?i=img_convert/a6ac8d447eacf3f0d560c30e97dca415.png) 结果是不停的输出1,这是个死循环,我们再回去看看GC ![image-20210529030403395](https://www.icode9.com/i/ll/?i=img_convert/6683f46402e3887c714ab231f2e266f0.png) 第一次观察 ![image-20210529030458038](https://www.icode9.com/i/ll/?i=img_convert/9cba9ec69ebe4ea93d2f69e16d01271f.png) 几秒钟后观察 ![image-20210529030536262](https://www.icode9.com/i/ll/?i=img_convert/335d81cb9bc4dd4490a446eb4a67dd38.png) 我把这个程序停止掉之后,最后进行观察,左边的test这个java程序就不见了,右边的GC也就停了下来 ![image-20210529030659873](https://www.icode9.com/i/ll/?i=img_convert/e890f572dc5a1dccdecbdb5ebc6e356f.png) 那现在就开始分析一下这几个过程,就看最后关掉之后的那个状态,可以看到GC time是指发生了多少次的GC,图中就是发生了233次GC,就花了276.256ms的时间,而下一行的Eden区,也是发生了223次GC,花费的时间也是276.256ms,很显然,发生的GC都是在Eden区,Old老年代区发生了0次GC,花费0s。 这只是个普通的死循环,工作量并不大,所以占用不了多少内存空间,根本就不会发生多少次GC,也根本不需要老年代区GC ![image-20210529031841633](https://www.icode9.com/i/ll/?i=img_convert/6c11cc7b11fdda987cbd1b2b75b20072.png) 而右边的进度图,就是说明内存使用的情况,当图中的色块达到顶端的时候,就是内存满的时候,这时候就需要进行一次GC,把内存占用推送到下一个区,满一次清理一次就GC一次 除了可以检测java虚拟机的垃圾回收,还可以监视一下该java程序CPU的占用情况,线程等等。 当我们开发其他程序的时候,可能需要对程序做优化,就要结合这些指标来进行分析,确定优化的方法。比如说CPU使用率一直只有很低,那就说明CPU可以利用的内存比较大,可以适当降低其他的消耗,提升CPU损耗来提升效率等等 ![image-20210529032509601](https://www.icode9.com/i/ll/?i=img_convert/54b36bf03a7f9fcb9a3aafe4ce263b58.png) 当然,除了我提及的各种性能监控和GC过程的查看,还有其他的功能可以使用,比如性能风险,观察各进程的运行情况等等 ![image-20210529033250362](https://www.icode9.com/i/ll/?i=img_convert/8fadc2699ded0f9727e70b67782ce0f1.png) ![image-20210529033341558](https://www.icode9.com/i/ll/?i=img_convert/9892d4f419e84ce62cbf23611419aee5.png) 最后,可能会有小伙伴会问,如果执行的程序不是死循环,而是一个普通的输出呢。如果执行的是那种执行完毕就会停止的,比如我这里把循环条件去掉,使程序只执行一次后停止 ![image-20210529034047637](https://www.icode9.com/i/ll/?i=img_convert/1d9ed21a490337d2b957b046d2785084.png) ![image-20210529034106601](https://www.icode9.com/i/ll/?i=img_convert/1a310d62fbbbebd1ad3778e0f9326356.png) 点击运行之后返回JVisualVM来查看结果,但JVisualVM并没有显示这个java进程,或者是一闪而过。这是因为JVisualVM只能实时监控到执行中的java程序,因为改动过的程序执行了输出之后就结束了,所以JVisualVM根本没办法去监控程序的状态,前面停止之后还能看到,是因为你已经在停止之前打开了这个程序的监控,在点了停止之后,显示的是停止之前最后一刻的状态 ![image-20210529034309071](https://www.icode9.com/i/ll/?i=img_convert/49515934d38088f9275f43fed9d44504.png) 今天的分享就到此结束了,感觉自己又向前迈了一小步,喜欢本文章的小伙伴可以点个赞或者留个评论支持一下哦

标签:教程,cn,img,image,convert,blog,https,使用,JVisualVM
来源: https://blog.51cto.com/u_15192324/2889495