可视化性能监控工具VisualVM

VisualVM是一个功能强大的免费的可视化性能监控工具,它的功能基本上包含了JDK提供的其他的工具。除此之外,它还可以支持插件的拓展。下面介绍一下其使用。

启动

当jvisualvm命令在系统的PATH中时,在命令行中执行jvisualvm便可以启动工具。如下所示:

连接进程

本地进程

从上面的图可以看出,jvisualvm启动时就展示出了可以监控的本地进程。双击进程子树,就可以进入监控页面。

远程进程

VisualVM也支持远程JMX连接。不过此时,远程的Java应用程序需要在JVM启动参数中,添加以下内容:

-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999    #VisualVM连接端口
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

一般情况下,我们不会直接在线上环境开启上述参数。一般用于测试环境的性能调优,所以没有增加认证。在开启端口后,需要在Server端开启响应端口(内网情况下,可以直接关掉防火墙)。

添加过程如下:

如果没有配置认证信息的话,只需要IP和端口号即可。如下图所示:

面板功能

概况

第一个TAB是概况信息,可以看到进程ID,主类、启动参数等。如下图所示:

监视

它展示了应用程序CPU、堆、永久区、类加载器和线程数的总体情况。可以通过右上角的“执行垃圾回收”、“堆Dump”,可以分别对JVM执行Full GC和Dump当前的堆快照信息。如下图所示:

线程

线程这一栏展示了当前进程的所有线程运行情况,点击右上角的“线程Dump”便可以对当前系统线程做一个快照,这个相当于执行jstack命令。如下图所示:

抽样器

VisualVM有2个采样器,CPU采样器内存采样器

CPU采样器可以将CPU的占用时间定位到方法。可以看到当前占用CPU比较多的方法是什么,和线程占用CPU时间的情况。

内存采样器可以看到当前线程的堆对象占用情况,和每个线程单独占用的情况。

​​​​​​​

VisualGC


BTrace