VisualVM是什么?
VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。
VisualVM可以干什么?
VisualVM可以运行监视、故障处理外,还将提供其他方面的能力,譬如性能分析(Profiling)。VisualVM的性能分析功能比起JProfiler、YourKit等专业且收费的Profiling工具都不遑多让。
VIsualVM功能
显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
·监视应用程序的处理器、垃圾收集、堆、方法区以及线程的信息(jstat、jstack)。
·dump以及分析堆转储快照(jmap、jhat)。
·方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
·离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
·其他插件带来的无限可能性。
下载安装
https://visualvm.github.io/index.html
解压
进入etc 打开visualvm.conf
编辑jdk路劲,你自己的jdk路劲
运行
安装插件
https://visualvm.github.io/pluginscenters.html
toos->plugins->修改地址
iy uj
下载插件
注意如果是虚拟机就用虚拟机下载
tools->Plugins->Downloaded
将插件导入然后install,再打开VigualVM
需的话可以把其他也装下
idea安装插件
进入 settings->plugins->Browse Repositories 搜索:VisualVM
配置路劲运行和jdk目录
运行选择
相关说明:
堆(Heap) :JVM管理的内存叫堆
分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。
Young(年轻代)
年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor区也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。
Tenured(年老代)
年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。
Perm(持久代)
用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。
Metaspace(元空间)
随着JDK8的到来,JVM不再有Perm。但类的元数据信息(metadata)还在,只不过不再是存储在连续的堆空间上,而是移动到叫做“Metaspace”的本地内存(Native memory)中。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。
线程查看
CPU查看
生成dump
最后
用visualvm来分析应用的性能也是一个非常好用的利器,在云服务及各大平台的开源工具没有出来之前,该工具一直是被当成神器一样来对待,随着现在各大云服务提供自带的一些分析工具更加便捷、更加高效所以visualvm虽然没有以前一样是被当成性能分析必须掌握的要求,但是该工具价值还是很高,有需要的同学可以自行了解掌握,说不定哪天升级打怪会用到该神器。
参考文章:
https://blog.csdn.net/xlecho/article/details/103814673
https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/