VisualVM是一个功能强大的免费的可视化性能监控工具,它的功能基本上包含了JDK提供的其他的工具。除此之外,它还可以支持插件的拓展。下面介绍一下其使用。
启动
当jvisualvm命令在系统的PATH中时,在命令行中执行jvisualvm便可以启动工具。如下所示:
连接进程
本地进程
从上面的图可以看出,jvisualvm启动时就展示出了可以监控的本地进程。双击进程子树,就可以进入监控页面。
远程进程
VisualVM也支持远程JMX连接。不过此时,远程的Java应用程序需要在JVM启动参数中,添加以下内容:
一般情况下,我们不会直接在线上环境开启上述参数。一般用于测试环境的性能调优,所以没有增加认证。在开启端口后,需要在Server端开启响应端口(内网情况下,可以直接关掉防火墙)。
添加过程如下:
如果没有配置认证信息的话,只需要IP和端口号即可。如下图所示:
面板功能
概况
第一个TAB是概况信息,可以看到进程ID,主类、启动参数等。如下图所示:
监视
它展示了应用程序CPU、堆、永久区、类加载器和线程数的总体情况。可以通过右上角的“执行垃圾回收”、“堆Dump”,可以分别对JVM执行Full GC和Dump当前的堆快照信息。如下图所示:
线程
线程这一栏展示了当前进程的所有线程运行情况,点击右上角的“线程Dump”便可以对当前系统线程做一个快照,这个相当于执行jstack命令。如下图所示:
抽样器
VisualVM有2个采样器,CPU采样器和内存采样器。
CPU采样器可以将CPU的占用时间定位到方法。可以看到当前占用CPU比较多的方法是什么,和线程占用CPU时间的情况。
内存采样器可以看到当前线程的堆对象占用情况,和每个线程单独占用的情况。
VisualGC
BTrace