相关文章:
在之前我们提到了,当遇到内存溢出、程序卡顿、CPU 占用率过高等情况下,我们可以通过 jmap、jstack 等 JDK 自带的命令通过命令行来进行分析,不过命令行操作不是很直观,那么有没有可视化的监控工具呢,答案是肯定的,这里我们就来了解下 JDK 自带的监控管理工具 JVisualVM
一、功能概览
-
JVisualVM 位于 JDK 的 bin 目录下,它可以监控本地所有的 Java 进程,这里我们启动之前测试内存溢出和死循环、死锁用到的项目
-
应用程序
- 如上所示,本地标签中展示了本地所有的 Java 进程 (实时展示)
-
概述
- 如上所示,在概述页面中我们可以查看当前 Java 进程的 JVM 参数 以及系统属性
-
监视
-
如上所示,在监视页面中,我们可以实时监控 CPU 的使用情况、堆的使用情况、类的装载情况以及线程的活动情况
-
除此之外,我们还可以主动执行垃圾回收以及生成堆 Dump 文件
-
在发生内存溢出时,我们可以在此处生成堆 Dump 文件用 JVisualVM 来进行分析,这与之前提到的用 jmap 命令生成堆 Dump 文件,用 MAT 来进行分析是相类似的,两种方式都能很好地解决内存溢出的问题
-
-
线程
-
如上所示,在线程页面中,我们可以实时监控该 Java 进程中所有线程的运行情况
-
除此之外,我们还可以生成线程 Dump 文件,可用于分析解决死循环、死锁等问题,这与之前提到的 jstack 命令的作用是相类似的
-
-
抽样器
-
如上所示,在抽样器页面中,我们可以对 CPU 以及内存进行抽样分析
-
在 CPU 抽样中,我们可以查看各个热点方法执行的时间,而不用我们手动在程序里写 startTime 和 endTime 来进行执行时间的运算了
-
在内存抽样中,相当于执行了 jstat 命令,每隔一秒钟打印一次内存情况,可以查看各个对象占用的字节以及相应的实例数
-
-
Profiler
- 作用于抽样器基本相同
-
Visual GC
- 如上所示,在 Visual GC 页面,我们可以查看 JVM 运行时各个内存区域的 GC 情况
-
二、添加插件
-
默认情况下,是没有 Visual GC 标签的,需要下载相应的插件
-
首先我们上 JVisualVM 的插件中心 (Plugins Centers),根据自己的 JDK 版本复制相应的插件地址,这里我的版本是 1.8.0_151,所以下载的是 JDK 8 Update 131 - 221
-
接着再将插件地址设置进 JVisualVM 的插件中心
-
最后我们上可用插件中,下载 Visual GC 插件即可 (由于我已经安装过该插件了,所以插件页面不再有显示)