JVM性能调优监控工具专题四:VisualVM基本篇之快照分析、监控GC、Eclipse集成

转载自: http://josh-persistence.iteye.com/blog/2233787(感觉写的非常棒,又担心以后找不到原文所以就转载过来用以保存)


一、概述

上一个专题专门举例说明了使用VisualVM进行远程监控以及对Tomcat的远程监控,如果有兴趣,可以查看:

http://josh-persistence.iteye.com/blog/2233459

该专题将讲解如何使用VisualVM生成快照、以及如何对JVM的GC进行监控,最后举例说明如何将VisualVM和eclipse进行集成。

 

二、快照功能

我们可以使用 VisualVM 的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,也可以相互传阅。VisualVM 提供了两种类型的快照:Profiler快照和应用程序快照。

 

  • Profiler 快照:当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成 Profiler 快照捕获当时的性能分析数据。



 点击“快照”按钮后,生成Profiler快照,也可以选择存储该快照在本地:



 

  • 应用程序快照:我们可以右键点击左侧 Applications 窗口中应用程序节点,选择“应用程序快照”为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和 Profiler 快照,同时也会捕获 JVM 的一些基本信息。

 

 



 

保存快照后便可以按照脱机的离线分析应用程序了。

 

三、监控JVM GC

如果需要使用VisualVM监控GC,首先我们需要安装visual GC 插件,在上面的启动界面中点击工具->插件->可用插件->Visual GC


注:Java VisualVM默认的插件中心网址已关闭服务,已经把服务迁移到github,可以进入这个网址https://visualvm.github.io/pluginscenters.html查询不同JDK版本对应的插件下载地址,再把Java VisualVM插件中的设置里的插件中心地址改成对应的下载地址即可。



 

安装结束后,就可以开始监控GC了,运行前面第一讲中说到的HeapMemoryTest.java,可以得到如下的截图:




上图的左边显示了Old,Eden,S0,S1使用的内存空间。右面的图表显示了各个部分申请和释放内存的详细信息。它以设定的刷新频率不停地跟新。

 

上图显示的是一个正常运行的程序。当发生内存泄露或者不正常的操作时,可以从图形本身明显地看出来,至少我们可以知道程序中存在和对象内存分配 和垃圾回收相关的问题。然后利用其他标签如“Threads”中提供的信息和Thread Dump我们可以缩小发生问题的范围。如下图:



 

在“监视”标签中,我们可以看到以时间线发展的内存使用概况图。这里有个“执行垃圾回收”按钮可以调用垃圾回收过程。

 

四、与Eclipse集成

其实我并不介意将eclipse和virsualvm集成起来,这不仅会加重eclipse的负担,在eclipse中的virsualvm标签和eclipse的程序代码标签之间切换来切换去会比较麻烦,还不如像前面所提到的一样,直接在控制台中启动visualvm,这样当eclipse中的程序启动的时候,就会默认被visualvm所监控到,这样不仅减轻了eclipse的负担,在问题发生时,也可以很好的对照eclipse中的代码和visualvm中的状态。

 

但是如果你确实很想在eclipse中添加visualvm的插件,首先可以从这里下载最新的eclipse launcher for visual vm: https://visualvm.java.net/eclipse-launcher.html,然后参照如下的两篇博客:

 

http://developer.51cto.com/art/200906/130424_all.htm 

http://www.blogjava.net/Nirvana/archive/2012/09/13/387618.html

展开阅读全文

没有更多推荐了,返回首页