使用VisualVM分析MyEclipse

MyEclipse包含了Sun公司的VisualVM分析器的高级集成。剖析可以为您收集有关应用程序的数据,因为它们运行并监测数据的统计。

  • 剖析一个独立的Java应用程序
  • 剖析一个Web应用程序
  • 剖析一个Java小程序

持续时间:20分钟

没有MyEclipse?立即下载

1. 确保分析器安装

VisualVM被包含在MyEclipse当中,但其却未必是您基础安装配置的一部分。如果没有安装,您可以很容易地添加组件。

(1)选择Help>Choose Components。

(2)在Selected中,在过滤字段中输入VM找到MyEclipse VisualVM的分析器组件。

技术分享
检查VisualVM的Profiler软件

(3)如果未安装VisualVM,从左侧选择它并将其移动到右侧添加的组件中。为了可靠地分析,您的应用程序必须在JRE 1.6.0更新的7或者更高的版本中执行。

2. 剖析一个独立的Java应用程序

(1)选择MyEclipse>Examples On-Demand来下载示例项目的分析。

(2)点击搜索,然后搜索swing。

(3)点击Swing Contact Manager安装按钮示例来将其安装到您的工作区中。

技术分享
安装示例应用程序
2.1 性能分析

(1)右键单击M4M Contact Manager示例项目,并选择Profile As>Java Application。这将启动性能分析模式的剖析。

技术分享
启动性能分析模式

(2)选择Main – com.myeclipseide.examples.m4m作为主类,然后单击确定,并选择性能分析模式,然后点击确定继续。

(3)在contact manager应用程序中选择一些新的名称来观察分析,此信息会被收集到VisualVM窗口。

技术分享
当名称被选中收集配置文件信息

(4)在列表中选择一个名称,然后单击删除会看到removeButtonActionPerformed方法被添加到列表中,以1为它的调用计数,每次单击删除后此计数都将增加。

技术分享
结果用删除按钮

(5)点击保存此时收集到的结果快照。使用过滤器来只显示您要查看的信息,您可以将其保存为以后要研究的文件。

技术分享
过滤快照信息

(6)关闭应用程序和VisualVM的窗口。

要在此运行分析会话,可以重复步骤1或者点击分析图标的下拉箭头。选择您要查看的剖析配置,如果先前所分析的应用程序仍在运行,在您启动另一个分析会话之前系统会提示将其关闭。

技术分享
从工具栏中运行配置文件
2.2 自定义性能分析

(1)右键单击该项目,并选择Profile As>Profile Configurations,或者点击文件图标的下拉菜单,并选择Profile Configurations。

技术分享
打开配置文件配置

(2)在Java应用程序节点下,从走遍的列表中选择应用程序。

(3)选择配置文件选项,然后在性能选项中更改分析器设置。

技术分享
性能分析器设置

配置文件

  • 此字段指定根方法分析器使用您应用程序的仪表,只有根方法和在应用程序其余部分继续运行的方法被称为仪表。
  • 使用添加按钮来指定一个方法、类或包。如果指定一个类,那么类的所有方法都会成为仪表的根。如果指定了一个包,那么包中所包含的所有类方法会成为仪表的根(根据您在根分析向导中的选择,这就意味着只有被选中的包或子包)。
  • 默认情况下,MyEclipse规定根包括项目中的所有包。

只/不要配置文件下面的类

  • 该分组过滤器控制这些包被(或者不)分析。除了根方法本身以外,如果方法满足此处的定义,那么分析数据值被收集和显示。
  • 默认情况下,MyEclipse为一个只包含在项目中的包指定一个过滤器,您可以在Lazy、Eager和Total仪表之间进行选择。

仪表方案

  • Lazy(MyEclipse默认值):由于它的低开销,所以它是长时间运行仪表的最佳方案。当使用这个方案时,首先检测的就是根的方法。当第一次执行根方法时,所有的方法调用都会被检测。
  • Total:在这个方案中,当加载类时这个类中的所有方法都要检测。对于长期运行的应用程序来说,由于它的高分析开销,因此它并不是一个好的方案。然而对于那些短暂工作的应用程序来说,在分析启动应用程序时它是有用的。
  • Eager:在这个方案中,每当一个类被加载时,分析器都将通过根方法直接或间接的定位仪表。因此仪表的方法数量比Lazy方案高得多,但是比Total更低。

分析启动时的基本框架

  • 如果应用程序的JVM启动也选择profiled.During性能分析的方法,在性能分析的跟踪方法中,进入和退出呼叫的方法会插入到各仪表的方法中。根据所使用的跟踪技术,这些呼叫可能会需要时间戳。

方法跟踪

  • 精确:有了精确的跟踪,在每个方法被调用的时间中进入和退出呼叫采用时间戳。这将会给你准确的执行方法的时间读数(进入和退出相应通话的时间),但由于大量调用OS高精度计时器会增加分析的开销。
  • 采样:时间戳采用的只是方法进入和退出呼叫时指定的采样发生在interva的末端。其方法调用仍计算准确,这个选项就大大降低了分析的开销,但其结果的准确性可能比那些使用精度技术的更低一些。

仪表方法调用()

  • 如果启用,所有的呼叫都使用反射(java.lang.reflect.Method.invoke())的跟踪和仪表。

仪表getter / setter方法

  • 启用getter和setter方法的仪表。

仪表的空方法

  • 启用不包含可执行代码的方法仪表。

分析新的threads / runnables

  • 如果启用,每次可运行的run()方法来视为根方法,也将导致调用一切方法来进行检测。

排除时间花费在Thread.sleep()和Object.wait()上

  • 如果选择了,这些方法都不会被分析。

分析线程数限制

  • 分析数据只从注册线程时收集。当未注册的线程进入仪表代码时,它就被注册了。当注册的线程的数目达到指定的限制,进一步停止登记。该计数器可以在分析器复位时重置收集的结果。
2.3 内存性能分析

(1)右键单击该项目,选择Profile As>Profile Configurations,并从列表左侧的Java应用程序节点下选择您的项目。

(2)选择配置文件选项,然后选择内存选项。

技术分享
内存配置文件设置

(3)自定义设置,然后单击配置文件来启动内存分析。

仅记录对象创建

  • 选中后,分析器收集有关的数量、类型和分配对象的位置信息。目前由目标JVM(和它加载的每个新类)来加载所有类仪表。

记录对象创建和垃圾收集

  • 如果选择此选项,除了上述选项提供的数据,你也给有关对象生动活泼的信息,即有多少给定类型的对象仍然存在。分析垃圾收集除了创建对象还增加了分析开销。

跟踪每一个X分配

  • 尽管特定类别的分配对象的数量会被准确地跟踪,但完整的分析数据是单独进行跟踪的,并且并且只收集每一个X(即类)个对象的分配。记录有关每一个分配信息,该图可以被设置为1,尽管这会显著的增加分析开销。默认情况下,MyEclipse跟踪每10个对象分配。

分配记录的堆栈跟踪

  • 如果启用,当对象创建被记录时,此时的调用堆栈也会被记录。默认情况下,整个调用堆栈都会被记录,但限制堆栈深度与X帧选项可以用于限制帧的数目,并减少分析开销。
技术分享
显示对象分配痕迹的内存快照

3. 分析一个Web应用程序

(1)右键单击Web项目,并选择Profile As>MyEclipse Server Application。

技术分享
启动web应用分析

(2)自定义设置按照第2节中的说明。分析配置您的Web应用程序是在MyEclipse服务器应用节点配置文件中的配置窗口下。

技术分享
Web应用程序的配置文件设置

4. 分析一个Java小程序

(1)右键单击小程序的项目,并选择Profile As>Java Applet。

技术分享
启动Java小程序分析

(2)自定义设置按照第2节中的说明。分析配置您的Java小程序是在Java Applet配置文件中的配置窗口下。

技术分享
对Java小程序的配置文件设置

5. 其他的VisualVM功能

在VisualVM的监视器选项中包含应用程序的当前状态、CPU和内存的使用情况概述。

技术分享
显示器选项

线程选项包含了您的应用程序的线程列表。

技术分享
Threads选项

以及您可以深入到获得特定线程的详细信息。

技术分享
Threads选项详细信息

点击应用程序按钮,右键单击您的应用程序并选择Thread或堆转储。

技术分享
转储申请
技术分享
线程转储
技术分享
堆转储

MyEclipse官方中文网上线,欢迎下载交流!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。