VisualVM

TIPS

  • 本文基于VisualVM 2.0.1编写
  • 不同版本的VisualVM特性有所不同(例如VisualVM 2.0+提供了对JDBC的性能分析),界面甚至也会有一定差异,因此,建议使用和笔者相同的版本测试。

官方说VisualVM是一个All-in-One Java Troubleshooting Tool,从JDK 6开始提供,是目前最强大的监控及故障处理程序之一。

启动

JDK 8或更低版本

对于JDK 8及更低版本,JDK内置了VisualVM。只需执行如下命令即可启动

  1. jvisualvm

JDK 9及更高版本

对于JDK 9及更高版本,VisualVM默认不再内置,而是作为一个独立项目维护,因此需要手动下载。独立下载的VisualVM,最低支持JDK 8。

因此,需自行下载。前往 https://visualvm.github.io/download.html 即可下载。其中:

  • zip文件:可适用于各种操作系统
  • dmg文件:可适用于macOS

建议下载zip文件。这里也提供百度盘加速下载地址:

  1. 链接:https://pan.baidu.com/s/1HXjzNDpzin6fXGrZPyQeWQ 密码:aon2

下载完成后,解压,并按操作系统启动:

  • 对于非Windows系统:运行如下命令即可启动
    1. ${visualvm目录}/bin/visualvm
  • 对于Windows系统:执行如下文件即可。

    1. ${visualvm目录}/bin/visualvm.exe
  • Overview:展示应用的概要信息,相当于可视化的jps、jinfo

  • Monitor:监控
    • 图表:展示CPU、内存、类、线程等曲线图
    • Perform GC:通知JVM执行垃圾回收
    • Heap Dump:Dump堆,相当于jmap dump命令。点击后,在左侧的heapdump节点上右击另存为,可将其存储为文件。
  • Threads:查看线程状态
    • Thread Dump:Dump线程,相当于jstack。点击后,在左侧的threaddump节点上右击另存为,可将其存储为文件。
  • Sampler:抽样器,可用于实时性能分析
    • CPU抽样:可展示每个线程花费的CPU时间、分析热点方法等
    • 内存抽样:展示堆直方图、每个线程的内存分配
  • Profiler:性能分析,提供了程序运行期方法级的处理器执行时间分析及内存分析

    • CPU性能分析、内存性能分析、JDBC性能分析
    • 还可以配置想检查的范围。
    • 注意点:
      • 执行性能分析,会对程序运行性能有比较大的影响,一般不建议在生产环境使用这项功能。可在开发/测试环境去分析并调优,也可用JMC代替,JMC的性能分析能力更强,而且影响相对小很多
      • 类共享(类共享是一种共享类,从而提升加载速度、节省内存的技术)可能会导致执行Profiler的应用崩溃,建议在执行Profiler的应用上添加-Xshare:off,关闭掉类共享。

        拓展知识

        OQL语法:https://blog.csdn.net/pange1991/article/details/82023771

        插件

  • Tools - Plugins - 安装插件

  • https://github.com/oracle/visualvm/releases,手动下载插件

    分析堆Dump文件

  • File -Load - 选择hprof - 打开 - 分析

    参考文档

  • https://blog.csdn.net/localhost01/article/details/83422902

  • https://jingyan.baidu.com/article/f3e34a12d39fd9f5eb65350e.html
  • https://www.cnblogs.com/xifengxiaoma/p/9402497.html
  • https://www.pianshen.com/article/644690794/
  • https://blog.csdn.net/u013970991/article/details/52036253