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。只需执行如下命令即可启动
jvisualvm
JDK 9及更高版本
对于JDK 9及更高版本,VisualVM默认不再内置,而是作为一个独立项目维护,因此需要手动下载。独立下载的VisualVM,最低支持JDK 8。
因此,需自行下载。前往 https://visualvm.github.io/download.html 即可下载。其中:
- zip文件:可适用于各种操作系统
- dmg文件:可适用于macOS
建议下载zip文件。这里也提供百度盘加速下载地址:
链接:https://pan.baidu.com/s/1HXjzNDpzin6fXGrZPyQeWQ 密码:aon2
下载完成后,解压,并按操作系统启动:
- 对于非Windows系统:运行如下命令即可启动
${visualvm目录}/bin/visualvm
对于Windows系统:执行如下文件即可。
${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://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