Java JProfiler教程

Java剖析工具JProfiler入门使用教程:与IntelliJ IDEA集成

Java剖析工具JProfiler可与多种IDE和应用服务器集成,本文主要介绍jprofiler与IntelliJ IDEA集成的全步骤。

1、在JProfiler的主菜单中选择Session->IDE integrations。值得注意的是,当执行插件安装时,需要关闭IntelliJ IDEA。如果通过JProfiler的安装向导执行安装程序,启动IntelliJ IDEA前需要完成整个安装。

2、为了通过IntelliJ IDEA分析应用程序,需要选择Run菜单中的其中一个profile命令,或者编辑器中的上下文菜单,或者点击相应的工具栏按钮。

Java JProfiler教程_第1张图片

“Run” menu with “Profile” action

Java JProfiler教程_第2张图片

Editor context menu with “Profile” action

3、JProfiler可以从所有的IDEA或者应用服务器中分析所有的运行配置类型。编辑运行配置,选择”Startup/Connection” 选项卡,然后选择”Profile” 可以进行进一步的配置。下列截图显示了本地服务器配置的启动设置。根据运行配置类型,您可以调整JVM选项或检索分析参数,进行远程分析。

Java JProfiler教程_第3张图片

Startup settings for profiling of a local server configuration

4、对于所有的运行配置类型,你可以决定是否要在JProfiler打开一个新的分析会话窗口,或者希望重用最后一个窗口以适应分析会话。

5、点击“Run”命令,开始分析应用程序。如果当时没有正在运行的JProfiler实例,仍会启动JProfiler,否则所运行的JProfiler实例将用于呈现分析数据。

Java剖析工具JProfiler入门使用教程:与Eclipse 3.2 集成

1、在JProfiler的主菜单中选择Session->IDE integrations。需要注意的是,当执行插件安装时,需要关闭Eclipse。如果通过JProfiler的安装向导执行安装程序,启动Eclipse前需要完成整个安装。

2、选择Eclipse的版本,本文以Eclipse 3.2为例,如图所示:

Java JProfiler教程_第4张图片

3、点击“Integrate”,选择Eclipse所在的文件夹。如:D:\apache-tomcat-6.0.32\eclipse,点击确定。

4、以D:\apache-tomcat-6.0.32\eclipse\eclipse.exe-clean方式启动eclipse。

5、在Eclipse里配置JProfiler。点击主菜单,->Windows->Customize Perspective->Commands,找到Profile,选中它,再点击OK即可,如图所示:

Java JProfiler教程_第5张图片

6、运行测试,选择你要测试的系统的主类。右击Profile as -> Java Application 运行即可。

Java剖析工具JProfiler入门使用教程:剖析模式

Java剖析工具JProfiler提供了4中不同的剖析模式,其中的三种模式涉及到了JProfiler GUI。因此,用户可以立即查看并分析数据。第四种模式不涉及JProfiler GUI,它是一种离线剖析模式。

1、Attach mode

对于剖析Java1.6或更高版本,JProfiler支持连接到一个正在运行的JVM并加载剖析代理。不过链接模式也有一些缺点,因为分析界面的一些功能在链接模式下无法使用。

Java JProfiler教程_第6张图片

2、Profile at startup

若要在启动时分析应用程序,在创建JVM前就必须激活剖析代理。这是通过添加一个特殊的JVM参数来实现:

-agentpath:[path to jprofilerti library]

对于Java>=1.5.0(JVMTI),用户无需手动添加次JVM参数。对于发起会话和IDE集成,JProfiler 都是自动完成这些操作的。其他情况下,也有集成的向导。

3、Prepare for profiling

可以通过追加nowait到the -agentpath VM参数来激活该剖析模式。在大多数情况下,可以根据集成向导来实现。在任何情况下,该模式比连接模式更有效,因为多数检测都独立于剖析设置。当加载类或者重转换类的数量变低时,执行这些监测。

4、Offline profiling

通过追加offline,config=[config file],id=[id] 到-agentpath VM参数,从而激活该模式。与”Prepare for profiling” 模式类似,所指定配置文件的选定对话框可用于分析设置。分析结果只保存到快照文件中,无法在Offline profiling(离线分析模式)下连接到JProfiler GUI。

Java剖析工具JProfiler入门使用教程:远程剖析

Java剖析工具JProfiler提供了强大的远程会话实时分析模式,通过修改Java开始命令行方式的VM参数,用户可使任意Java应用程序监听来自的JProfiler GUI的连接。此外,JProfiler还提供了相当多的集成向导,可用于主流的可以帮助用户安装和设置其应用程序的应用程序服务器。

如果用户没有远程计算机的物理访问权限或者远程计算机没有运行JProfiler GUI,用户必须设置远程分析。远程分析意味着剖析代理运行在远程计算机上, JProfiler GUI运行在本地地计算机。剖析代理和JProfiler GUI 通过插口相互连接。

Jpenable命令行实用程序

为了避免运行集成向导或修改所分析的应用程序的VM参数,用户只需要从远程计算机的下载页面提取JProfiler存档。用户无需输入许可证密钥。在远程计算机上运行bin/jpenable命令行应用程序。用户可选择一个JVM并将剖析代理加载至JVM中,以便它可以监听一个特定的剖析端口。在本地JProfiler GUI中,用户可以链接到一个 “Attach to profiled JVM (local or remote)”会话。

远程集成向导

JProfiler中所有的集成向导可以帮助用户建立远程分析。在选择集成类型或应用程序服务器后,向导询问分析程序的所在位置。如果你选择了远程选项,窗口中会提示其他一些关于远程计算机的问题。

Java JProfiler教程_第7张图片

启动远程分析

如果在本地服务器上运行集成向导,JProfiler可以启动并连接到它。如果集成向导位于远程服务器上,JProfiler就无法启动的服务器。对于远程程序和服务器,用户需要执行以下两项操作开始分析会话:

1、在远程机器上执行修改后的启动脚本。根据用户在远程分析向导中所选的项目,有两个启动顺序:完全启动应用程序或者服务器,或者打印几行信息,并提示正在等待连接。

2、在本地计算机上启动JProfiler GUI中的 “Attach to profiled JVM” 会话。

Java剖析工具JProfiler入门使用教程:查找内存泄漏的方法

JProfiler的内存视图会话提供了内存使用情况的动态更新视图以及分配点的信息视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。本文主要介绍如何意识到内存泄漏以及查找内存泄漏的几种方法。

意识到内存泄漏

怀疑内存泄漏的第一步就是查看 “Memory”和”Recorded objects” 遥感勘测视图。当应用程序出现内存泄漏时,视图中会显示出带有震荡的线性积极趋势。如果没有这样的线性趋势,您的应用程序可能只是消耗了大量的内存,而不是内存泄漏。处理方法很简单,找出占用大量内存的类或阵列,尽量减少类或阵列的数量。

使用差异缩小内存泄漏

查找内存泄漏的起源的第一步就是查找对象视图和所记录的对象视图的差异。简单的内存泄漏可以利用差分功能来追查。

观察对象视图和所记录的对象视图的差异,然后找出该差异是有哪些类引起的。然后,当切换到热点视图时,选择问题类别,然后观察问题实例所分配到的差异列。此时,知道实例创建的方法。

堆遍历器和内存泄漏

当获取了一堆快照时,首先你必须创建一个带有对象实例的对象集。如果你在动态内存视图中已经收窄内存泄漏原因的范围,你可以使用 “show selection in heap walker”来保存操作并启动堆遍历器。

利用对象视图找出内存泄漏原因

大多数的内存泄漏可以被追溯到对象集群。这将产生一些大的retained size的对象。最大的对象视图列出了带有最大retained size的对象。你可以利用该树形向下钻取从而发现错误引用。

Java JProfiler教程_第8张图片

使用参考图找到内存泄漏的原因

找出内存泄漏的核心工具是堆遍历器中的参考图。依次打开传入引用,你可能会立即发现一个错误引用。在复杂的系统中,这往往是不可能的。在这种情况下,你必须要找到一个或多个”garbage collector roots”。Garbage collector roots是JVM中的点,不受垃圾回收机制的约束。当你选择了传入引用或图形中的一个对象时,顶部的[Show path to GC root] 按钮被启用。

Java JProfiler教程_第9张图片

garbage collector roots非常多,若全部显示它们,可能会造成大量堆积,如图所示。此外,查找garbage collector roots也很耗时。 如果找到成千上万的roots,计算的时间很长而且会占用大量内存。为了防止这些问题,最好开始时从单个garbage collector root 开始查找,然后根据利用 UP to roots 根据需要慢慢增加garbage collector root。

Java JProfiler教程_第10张图片

garbage collector root 的链条可以很长,如图所示:

Java JProfiler教程_第11张图片

使用cumulated references views以查找内存泄漏的原因

在某些情况下,您可能无法成功地缩小对象设置的规模。你的对象集中可能仍包含了大量的实例或者在此情况下,使用参考图不可能会提供任何见解。这时,堆遍历器的引用视图中的 the cumulated reference tables 就可排上用场了。cumulated incoming reference table显示了当前对象集中所有可能的引用类型:

从引用类型中,你就可以缩小对象集。例如,您可能知道那些引用类型是正常的,那些是不正常的。

Java JProfiler教程_第12张图片

Java剖析工具JProfiler入门使用教程:离线剖析和触发器

Java性能分析工具JProfiler提供了2种完全不同的方法剖析应用程序。默认情况下,用户可以利用JProfiler GUI来进行应用程序性能分析。JProfiler GUI 为用户提供了启动和关闭记录的按钮并能为用户显示所有分析数据。当用户不想用JProfiler GUI剖析程序时,可以使用JProfiler提供的离线剖析功能。 离线剖析允许用户利用剖析代理来分析应用程序。而无需连接到JProfiler GUI。

Profiling API

有了离线profiling API,用户可以以编程方式在代码中调用剖析操作。该方法的缺点是,用户必须在开发过程中将JProfiler代理库添加到应用程序的类路径,将临时剖析代码添加到源代码,并且在每次改变剖析操作时,就需要重新编译源代码。

Triggers

有了触发器,用户可以在JProfiler GUI指定所有的剖析操作,无需修改源代码。 触发器Triggers保存于JProfiler配置文件中。当用户启用离线剖析模式时,配置文件和会话ID被传送到命令行上的剖析代理中,因此,剖析代理可以阅读这些触发器定义。

Java JProfiler教程_第13张图片

Java剖析工具JProfiler入门使用教程:远程会话

Java性能分析工具JProfiler提供了强大的远程会话实时分析模式,本文将介绍如何通过远程机器来启动Java性能分析工具JProfiler的远程会话功能。

大多数情况下,Java性能分析工具JProfiler是通过应用服务器集成向导来与应用服务器进行整合的。然而,当远程机器上面没有GUI时,你可以使用bin目录下的可执行文件jpintegrate 作为控制台集成向导。

如果你想在远程机器上快速剖析JVM 1.6或者更高版本,你需要在远程机器的下载页面提取一个JProfiler文档。在远程机器上运行 bin/jpenable命令行应用程序。你将选择一个JVM并将剖析代理载入JVM,以便监听一个具体的剖析端口。在本地JProfiler GUI中,创建一个 “Attach to profiled JVM (local or remote)” session,输入主机名称和与远程机器上 jpenable中所指定的相同的剖析端口。,

为了永久性地以这种方式启动应用程序或应用程序服务器,你可以将其与JProfiler GUI前端的远程会话链接起来,步骤如下:

Java >= 1.5.0 (JVMTI)

添加 VM参数到启动命令行:

-agentpath:{Path to jprofilerti library}

{Path to jprofilerti library} 取决于操作系统和 JVM的架构,而非操作系统的架构。

Java JProfiler教程_第14张图片

Java剖析工具JProfiler入门使用教程:连接JVM

Java性能分析工具JProfiler可以在JVM不启动VM 参数分析的情况下剖析JVM 1.6及更高版本。通过Oracle/Sun JVM中附带的API,JProfiler可自由地加载剖析代理。连接到JVM的两种情况如下:

1、本地运行JVM

在主菜单中调用 Session->Quick Attach ,然后从JVM列表中选择所需的JVM。当用户选择session时,用户可以保持会话设置(过滤,分析和触发器设置),以便用户将来可以再次使用。当用户再次链接到同一应用程序时,便可重新启动所保存的会话,而不用”Quick attach”。

2、在远程机器上运行的JVM

在这种情况下,在远程机器上运行 bin/jpenable命令行应用程序。你将选择一个JVM并将剖析代理载入JVM,以便监听一个具体的剖析端口。在本地JProfiler GUI中,创建一个 “Attach to profiled JVM (local or remote)” session,输入主机名称和与远程机器上 jpenable中所指定的相同的剖析端口。

当你启动会话时,会话便连接到远程JVM,用户便可以进行剖析。

你可能感兴趣的:(开发工具)