JVM学习总结五(番外)——VisualVM

    距离上次介绍Jconsole已经时隔两周了,这期间因为工做中要用go来作一个新项目,因此精力都用在入门go上了,不过发现go语言用起来真的挺不错的,比python感受还好点,你们没事能够了解下。
    言归正传,VisualVM和Jconsole同是图形化的jvm监控和分析工具,二者在一些基本功能上的使用大同小异,好比内存、线程、jvm环境参数等,可是相对而言VisualVM的功能要稍强于Jconsole,至关于增强版的Jconsole。同是visualVM的一些高级功能是经过安装插件来拓展,因此更能因需定制。先看下起始页:java

    因为VisualVM官方已经提供了很完善的使用文档(一样是亲儿子,Jconsole的文档就有点寒掺了,并且VisualVM有一部分居然有中文版),因此这里就不作详细介绍,只重点看一下的VisualVM两个方面:python

  • 插件安装
  • 程序性能分析

1、VisualVM插件安装

    这个其实没什么好介绍的,基本上看图就明白了。插件能够进行手工安装,能够再插件中心下载*.nbm,在选项“工具—插件—已下载”中选择安装,可是做为一款便捷的图形化工具,这样作无心有点费事,其实在"工具—插件"中咱们能够直接管理已安装插件,并选择下载安装须要的新插件。看图:
linux

   能够看到VisualVM提供了很丰富的插件,咱们只要选中须要插件,点击安装便可(固然,前提是你待联网了)。好了,就是这么简单。 git

2、程序性能分析

    这里使用我写的一个小的web服务器作示例,介绍和代码见博客(因为以后更新,可能github与介绍有必定出入),可运行包见下载(目前win下可直接经过bin下start.bat启动,因为start.sh是拷以前一个项目的,暂时有些问题,因此linux下就直接java命令启动吧),成功启动后以下: github

    而后经过VisualVM打开对应进程,能够经过概述、监视、线程、visaul GC查看程序当前jvm参数、内存、cpu、线程和gc的各项状况。咱们这里重点关注一下VisualVM提供的性能分析工具Profilter,咱们直接打开该选项卡,点击CPU将开始收集信息并分析。结果你可能发现当时只有ServerTimerTask.run()一项(也可能会有不少项,这主要因为是实时分析,看你打开时程序在作什么操做,是个web服务器,因此可能有个定时轮询的任务一直在执行,因此至少会有这一项,并且包路径sun.net.httpserver也可能看出这点),为了尽快看到更多调用信息,咱们直接在浏览器打开http://localhost:8888/json/show.do (这是测试项目中测试json数据的路径),会发现出现不少调用信息,截图以下: web

    能够看到cpu耗时最多的是log,这其实也好理解,因为写代码的时候几乎在每一个操做内都打了log,并且还有写外部log文件的操做,因此耗时较长,从这点看这个程序应该选择一些关键地方打log,好比在调度模块的起止地方、异常处理模块里边,而没有必要每一个操做都输出信息。而第二个则是Exchange.run(),这个更好理解了,因为程序在http请求接收和相应处理上目前使用jdk的httpserver模块,而Exchange正是对这些操做的封装,是web服务器的核心模块,cpu耗时可能是天然的。第三名若是你看过代码就明白了,responseToClient方法是将响应数据写入响应流。其余的就不一一分析了,其实了解了功能和代码就很容易看明白。
    咱们再来看下调用次数,按照调用次数排序后,会发现ServerTimerTask.run()调用次数远远高于其余方法,这个根据前边说的应该都明白,就不解释了。同时能够看一下responseToClient()的调用次数,会发现和你网页上请求的次数一致。
    最后咱们来看一个典型的例子,咱们在方法名过滤器输入SessionCleanTask,结果以下: json


    若是你耐着心观察,会发现没两分钟调用次数会+1,其实这个方法是个timeTask,做用就是每两分钟清理一次过时的session(咱这程序麻雀虽小,但还算五脏俱全吧^_^)。

    下边看下内存的分析,该项里边能够看到每一个对象实时的内存占用、对象数和年代数,具体分析思路其实和cpu大同小异, 就再也不细说了,看图:
浏览器


    好了,VisualVM介绍到此结束,其实其功能要比这强的多,好比dump文件分析和BTrace动态日志追踪(经过热插入日志代码分析程序)等,感兴趣就自行分析吧,这里还有一篇介绍VisualVM可供参考
    以后将考虑开始写类文件结构和类加载部分,不过因为工做忙起来了,因此速度可能慢些,尽可能一周至少一篇吧。不费话了,没衣服穿了,出去买件衣服,否则明天木法上班了T_T。服务器

相关文章
相关标签/搜索