JVM-VisualVM:多合-故障处理工具

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

bbe638b2de1ec74bf0f17a134800b87e.png

8eb9326691585929544e51b18f0400b7.png

解压

进入etc 打开visualvm.conf

35ee5e274e5bbf26fd2f25b8326da95f.png

编辑jdk路劲,你自己的jdk路劲

1ba529235b81ba93eabea637d8258a08.png

运行

be6f3392f5577483d662227ce8a5bfaf.png

7dc3a36441861d0be67d17fed63762c0.png

安装插件

https://visualvm.github.io/pluginscenters.html

0a8d919de27982442bf0e614aff8e4fe.png

24243e775cb6a7e2ca6bc3a71d752de0.png

toos->plugins->修改地址

iy uj

cbfd2082d46d18d192da53c3a9cca2e1.png

a4abb052810d8543fa8923047879aad6.png

下载插件

注意如果是虚拟机就用虚拟机下载

c710d73e3ae5fa3f733d29fe42c44c90.png

2ca52cd1fa2577db4e18ee6e266de647.png

tools->Plugins->Downloaded

39a8f1ab65b9547d611544924ce3dbcf.png

将插件导入然后install,再打开VigualVM

034232e0d9556f5311204c574d090fa9.png

需的话可以把其他也装下

3bd0eeb0a64d8e12cd8466c5ba2ceb63.png

idea安装插件

进入 settings->plugins->Browse Repositories 搜索:VisualVM

0a0563a3e1d6966f0db7fef5cb194a5b.png

35c30ca87aa57e67b7cdfd702b8904ec.png

配置路劲运行和jdk目录

111832ebaa1821eaddd69c86ac85b702.png

运行选择

da5c6a1e0f4493ae1fa633d0c3cbd8be.png

cb8522111c73cf5283ed3c9379148d9c.png

相关说明:

堆(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规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。

线程查看

b8d78ec0b12fc3a5599847064315c0b7.png

CPU查看

e1f9c19b07c34d3b6340e1c6cf5ae92c.png

bef2b044df69156b2c584504e46f4cf0.png

生成dump

723620421723ae07e6acd84b1f1c8c03.png

最后

    用visualvm来分析应用的性能也是一个非常好用的利器,在云服务及各大平台的开源工具没有出来之前,该工具一直是被当成神器一样来对待,随着现在各大云服务提供自带的一些分析工具更加便捷、更加高效所以visualvm虽然没有以前一样是被当成性能分析必须掌握的要求,但是该工具价值还是很高,有需要的同学可以自行了解掌握,说不定哪天升级打怪会用到该神器。

参考文章:

    https://blog.csdn.net/xlecho/article/details/103814673

    https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

5e9288b199df4f6096a564a80c4278b4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值