性能调优工具

发表时间:2017-11-15 10:57:51 浏览量( 18 ) 留言数( 0 )

学习目标:

1、了解可视化的性能监控工具


学习过程:

一、jconsole

    Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

    直接在jdk/bin目录下点击jconsole.exe即可启动,界面如下:

attcontent/84e8ddb4-8ef4-44c7-8808-8e3bf2c00c3f.png

    在弹出的框中可以选择本机的监控本机的java应用,也可以选择远程的java服务来监控,如果监控远程服务需要在tomcat启动脚本中添加如下代码:

 -Dcom.sun.management.jmxremote.port=6969  

 -Dcom.sun.management.jmxremote.ssl=false  

 -Dcom.sun.management.jmxremote.authenticate=false

    连接进去之后,就可以看到jconsole概览图和主要的功能:概述、内存、线程、类、VM、MBeans

概述,以图表的方式显示出堆内存使用量,活动线程数,已加载的类,CUP占用率的折线图,可以非常清晰的观察在程序执行过程中的变动情况。

attcontent/d306d6ab-f5b5-4461-ab6d-7643862975fb.png

内存,主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比,也可以点击执行GC来触发GC的执行

attcontent/89e25d79-4424-44b1-a0c6-0c8f3fcae5c9.png

   线程,主界面展示线程数的活动数和峰值,同时点击左下方线程可以查看线程的详细信息,比如线的状态是什么,堆栈内容等,同时也可以点击“检测死锁”来检查线程之间是否有死锁的情况。

attcontent/334509b8-b6a4-480c-8d57-45a20726b809.png


类,主要展示已加载类的相关信息。

VM 概要,展示JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等。

attcontent/c8c22024-c6d9-40b9-8918-7f7ede3c52c0.png

Mbean,查看Mbean的属性,方法等。


二、VisualVM

     VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。

    VisualVM 是javajdk自带的最牛逼的调优工具了吧,也是我平时使用最多调优工具,几乎涉及了jvm调优的方方面面。同样是在jdk/bin目录下面双击jvisualvm.exe既可使用,启动起来后和jconsole 一样同样可以选择本地和远程,如果需要监控远程同样需要配置相关参数,主界面如下;

     attcontent/0f0b353e-da12-4cf3-8a36-b9b005f8e4b3.png   

    VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。

1、从主菜单中选择“工具”>“插件”。

2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。

3、逐步完成插件安装程序。

attcontent/1817eecd-c4b5-4ba2-82ff-e84f0402725b.png

   主界面展示了系统和jvm两大块内容,点击右下方jvm参数和系统属性可以参考详细的参数信息.

    监控的主页其实也就是,cpu、内存、类、线程的图表

attcontent/fd13a7c0-7154-4045-bcfa-3c0f900f8ebb.png

    线程和jconsole功能没有太大的区别

attcontent/eef74b45-1fe0-4267-9709-ae9b6c255c26.png

    Visual GC 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。

attcontent/1da84818-db0e-4f94-9b20-d2af21deb009.png

    以上的功能其实jconsole几乎也有,VisualVM更全面更直观一些,另外VisualVM非常多的其它功能,可以分析dump的内存快照,dump出来的线程快照并且进行分析等,还有其它很多的插件大家可以去探索。