JProfiler在Windows下的使用教程

一、安装JProfiler

   从http://www.ej-technologies.com/下载5.1.2并申请试用序列号

二、主要功能简介

1.内存剖析 Memory profiler
JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。

所有对象 
显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。
记录对象 Record objects 
显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。
分配访问树 Allocation call tree 
显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。
分配热点 Allocation hot spots 
显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。

2.堆遍历 Heap walker

在JProfiler的堆遍历器(Heap walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:

类 Classes 
显示所有类和它们的实例。
分配 Allocations 
为所有记录对象显示分配树和分配热点。
索引 References 
为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。
数据 Data 
为单个对象显示实例和类数据。
时间 Time 
显示一个对已记录对象的解决时间的柱状图。

3. CPU 剖析 CPU profiler

JProfiler 提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括:

访问树 Call tree 
显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。
热点 Hot spots 
显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。
访问图 Call graph 
显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。

4. 线程剖析 Thread profiler

对线程剖析,JProfiler提供以下视图:

线程历史 Thread history 
显示一个与线程活动和线程状态在一起的活动时间表。
线程监控 Thread monitor 
显示一个列表,包括所有的活动线程以及它们目前的活动状况。
死锁探测图表 Deadlock Detection 
显示一个包含了所有在JVM里的死锁图表。
目前使用的监测器 Current monitor useage 
显示目前使用的监测器并且包括它们的关联线程。
历史检测记录 History usage history 
显示重大的等待事件和阻塞事件的历史记录。
监测使用状态 Monitor usage statistics 
显示分组监测,线程和监测类的统计监测数据。

5.VM 遥感勘测技术 VM telemetry

观察JVM的内部状态,JProfiler提供了不同的遥感勘测视图,如下所示:

堆 Heap 
显示一个堆的使用状况和堆尺寸大小活动时间表。
记录的对象 Recorded objects 
显示一张关于活动对象与数组的图表的活动时间表。
垃圾回收 Garbage collector 
显示一张关于垃圾回收活动的活动时间表。
类 Classes 
显示一个与已装载类的图表的活动时间表。
线程 Threads 
显示一个与动态线程图表的活动时间表。

三、配置

1、 JProfiler’s start center

在安装完毕后打开会有一个页面向导这里写图片描述
使用 JProfiler’s start center,你可以创建新的会话,编辑已有会话或者打开已保存的会话。

在菜单中选择 start center ,也可以打开这个向导页面、有以下四个标签:Open session、New session、Convert session和 Open snapshot。
我们可以先看第一个

1.1 Open session

在 start center 中,打开 Open session标签,在窗口中显示所有预先定义的会话,如上图:

你可以选择一个会话,点击 OK来打开预定义的会话。

会话也可以被修改、复制、删除和排序。

也可以菜单中选择 session –> Open session,打开 Open session窗口。

1.2 New session

 会话能够通过两种途径创建:

第一种:人工配置:使用[New session]按钮手工配置一个新的session,配置完成后,开始运行(如何配置详见下面)

第二种:通过集成向导:使用集成向导上的三个按钮:[New server integration] 、[New remote integration] 和 [New applet integration] 。

会话创建完成后可以立即运行。在 Open session标签页中能够看到新建的会话。
这里写图片描述
1.2.1 New Session(人工配置创建)
点击New Session按钮,显示Application Settings窗体
这里写图片描述
此页面也可以在菜单中选择 Session–>New Session,打开 New Session 窗体

1.2.2 New server integration(通过集成向导创建)
点击 New server integration按钮,打开集成向导,引导你将 JProfiler与本地或远程的应用服务器进行集成,步骤:
第一步、选择需要集成的应用服务器。
如果你所使用的应用服务器不在列表中,则选择“Generic application sever ”,并点击“下一步”;如图:
这里写图片描述
第二步、 选择要集成的应用服务器地址
选择要集成的应用服务器是本地的,还是远程的。如果你选择远程计算机,在选择的计算机上必须安装 JProfiler,并选择远程计算机的操作系统,点击“下一步”如图:
这里写图片描述
第三步:选择 JVM提供商,版本和模式(也就是指定jdk的版本)
当你选择 jdk版本时,系统会自动选择推荐的模式
这里写图片描述
第四步、选择 Jprofiler 启动界面方式。
在开发环境,建立选择第一项,很容易修改监测设置;如果你选择不等待,在启动应用服务器之前要先配置监测设置。VM参数依赖于 JProfiler配置文件的位置;配置文件要与远程计算机上的保持同步。
1、wait for a connection from the Jprofiler GUI : 监控时 tomcat 需要由 JProfiler来启动
2、startup immediately,connect later with the JProfiler GUI: 立即启动,稍后与JProfiler 页面连接
3、profile offline ,JProfiler GUI cannot connect :在脱机情况下,jprofiler gui 无法连接
这里写图片描述
我选择第一个立即启动稍后连接(有兴趣的可以都尝试一下)
第五步:选择 Tomcat 启动脚本文件路径
这里写图片描述
第六步:指定JPfrofiler的端口(选择监测的连接端口)
JProfiler GUI 前端通过指定的端口连接被监测的 JVM,默认端口为 8849。请不要选择常用的端口,如 80或 8080。
这里写图片描述
第七步:检查需求通知
集成向导完成配置,所有必须的信息会进行通知,请检查,点击下一步。如图:
这里写图片描述
第八步:完成是否立即运行
这里写图片描述
这里就新建一个session完毕。配置完毕后你会在Open session 中看到你配置的内容
选择启动、因为在第四步中选择了第一种。所以会出现
这里写图片描述
这里写图片描述
选择第二个、之后会出现
这里写图片描述
点击ok、则启动成功了!
这里有个问题:
在第四步中如果选择了第二种。那么无论是tomcat启动没有启动JProfiler都启动不了抛出一个Connection error的错
这里写图片描述
待排查
而在第四步选择第三种方式时。tomcat有没有启动JProfiler抛上面相同的错误。同上面。
待排查

1.3 Open snapshot
可以通过打开*.jps文件来打开原来保存过的 session
2 管理 session(不做详解)
2.1 Application settings dialog
这个页面可以是在创建session时管理,也可在open session右键编辑管理(如前面人工配置图片)
session 名称 session类型等根据需要自定义
这里写图片描述
3、监测视图
3.1 内存视图
JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。
这里写图片描述
3.1.1所有对象(ALL objects)

所有对象视图显示所有加载的类的列表和在堆上分配的实例数。只有 Java 1.5 (JVMTI)才会显示此视图。要查看特定时间段对象的分配,并记录分配的调用堆栈,请使用“记录的对象视图”

有一个集合体等级选择器,你可以在以下几种类型中切换:

类(classes):每一行显示一个单独的类,这是默认的集合体类型
包(packages):每一行显示一个单独的包,子包不包含在内。在这个集合体等级内,表是树形的。你可以点击树节点,查看其包含的类
 J2EE组件(   J2EE  components):每一行是一个 J2EE组件。此模式类似类模式中的过滤器,能够让你快速检查应用中加载的 J2EE组件。

在表中显示三行,可以排序

名字:根据集合体等级的不同,分别显示类、包或      J2EE 
实例数:
大小:显示所以分配实际的总大小。只包括相应指针的大小,不包含引用数组和实例的大小。以字节显示。只包括对象数据,不包括类使用的 JVM大小,也不包含类数据和本地变量大小。

更新频率可以在profiling settings dialog的miscellaneous tab中设置。所有对象视图的更新频率是根据堆上的对象数来自动调整的,如果堆上有太多对象,所有对象视图的计算变得昂贵,所以更新频率会降低。你可以随时刷新以获取最新数据。

你可以在class tracker增加包或类。如果类跟踪器没有记录,则开始记录class tracker 中配置的所有类;如果正在记录不同的对象类型,所以的记录数据被清空

你可以冻结所有的视图让所有的视图对象保持静态

你可以标记当前值并显示差异值。

3.1.2 记录的对象(Recorded objects)

记录的对象视图显示所有已记录对象和数组的列表,包括堆上分配的实例数。只有已记录的对象在此视图中显示。配置记录的细节请参见 memory section overview

如果选择了某个包或类,你可以从记录对象视图跳转到分配调用树和分配热点。方法是右键点击,选择要跳转的视图。

你可以在class tracker增加包或类。如果类跟踪器没有记录,则开始记录class tracker 中配置的所有类;如果正在记录不同的对象类型,所以的记录数据被清空

记录的对象视图可以根据对象的活动状态进行过滤:

活动对象(Live objects) 只显示当前在内存中的对象
垃圾回收对象(Garbage collected objects) 被显示被回收的对象
活动的和垃圾回收对象(Live and garbage collected objects) 显示所有被创建的对象

右键选择 Change view mode 或者使用 View->Change view mode切换三种模式

你可以标记当前值并显示差异值。

3.1.3 分配调用树(Allocation call tree )

分配调用树视图 显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件

3.1.4 分配热点视图(Allocation hot spots view)

分配热点视图显示所选类的对象被分配在哪儿的方法列表。分配到至少占总数 1%的方法才会被显示。方法可以根据active filter sets设置进行过滤。此视图和CPU section 里的hot spots view视图有些类似,只是显示的是分配的类的实例数和数组而不是时间度量

对于每个热点都可以显示它的跟踪记录树。

3.1.5类跟踪(Class tracker)

3.2 堆遍历(Heap Walker)

3.2.1类(Classes)

显示所有类和它们的实例

3.2.2分配(Allocations)

为所有记录对象显示分配树和分配热点

3.2.3索引(References)

为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能

3.2.4数据(Data)

为单个对象显示实例和类数据

3.2.5时间(Time)

显示一个对已记录对象的解决时间的柱状图

3.3 CPU视图

3.3.1调用树视图(Call tree view)

调用树显示一个线程从上向下调用树。可以根据过滤设置向上或向下过滤显示。

JProfiler自动检测 J2EE组件并在调用树中显示相关的节点。使用不同的图标显示不同的 J2EE组件类型

 servlets:黄色倒心形
JSPs:蓝色倒心形
 EJBs:红色倒心形 

对于 JSPs 和 EJBs, JProfiler显示名为:

JSPs:JSP 源文件路径
 EJBs:EJB界面名称

如果 URL可以被细分,每个 URL请求使用一个特殊的符号创建一个新的结点以URL:做前缀,后面跟上细分后的 URL请求

调用树视图集合体等级选择有四种:

方法,也是默认等级。每个节点都是一个方法调用。特殊的      J2EE组件方法有他们自己的图标和显示名,上面讲到过。真实的类名以方括号括起
类:每个节点是一个单独的类。特殊的      J2EE组件方法有他们自己的图标和显示名,上面讲到过。真实的类名以方括号括起
包:每个节点是一个单独的包。不包括子包
J2EE组件:每个节点是一个  J2EE组件,如果组件有独立的显示名,真实类名省略。

调用树不显示 JVM中的所有方法,只显示:

未过滤的类:根据你配置的过滤器设置没有过滤的类
未过滤的类的第一级调用:未过滤的类对过滤的类的第一级调用,对过滤类的深一级的调用不显示。过滤的节点在左上角以红色标记。
线程实体方法:方法       Runnable.run()和主方法总是被显示的,无论是否过滤一个特殊的结点是桥结点,本来在视图中不显示,但其子孙节点在视图中显示。如果在  view settings中设置了percentage bar模式,调用树中的每个节点都会显示一个百分比条,显示当前节点的内部时间占总时间的百分比,当前节点包括其所有子孙节点和红色高亮的部分在view settings可以设置以下内容:

这需要一个图片后期补

1)节点描述

百分比数:考虑树的根或调用节点
总时间度量:ms或  µs 。包括调用其它节点的总时间。
内部时间度量:ms或  µs。内部时间,不包括调用非过滤类
invocation count:显示在此路径中节点被调用的频繁程度。
是否显示方法调用全名
是否显示方法调用签名(显示参数)
是否在括号内显示平均时间

2)时间范围

自动
s 
ms 
us 

3)显示极限

隐藏小于一定百分比的调用

4)百分比计算

绝对
相对

名称显示依赖集合体等级:方法、类、包和 J2EE组件

行数在以下情况下会显示:行数显示的是调用(invocation)的行数,还不是方法本身的行数

集合体等级为方法
在profiling settings设置中选择了显示行数
调用类为未过滤类

你可以选择任何一个节点,然后选择 View->Set as root ,将选择的节点改为根节点。如果在 view settings 里,百分比基数设置为“total thread time”,百分比会按照新的根节点重新计算。选择 View->Show all返回所有视图

你可以停止或重启 CPU数据获取来清空调用数,也可以冻结所有视图让调用数保持静态

3.3.2热点视图(Hot spot view)

热点视图显示选择类型的调用列表。截去了占总时间小于 0.1%的点。

热点类型”hot spot type”下拉中可选择,包括两种:

1》方法调用(method calls)

method calls (show filtered classes separately) 

从方法调用中计算显示的热点,被过滤的类计算自己的热点,默认为此模式。

method calls (add filtered classes to calling class) 

从方法调用中计算显示的热点,被调用的类被加到调用类上,除非是线程实体方法(run和 main 方法)

根据你选择的集合体等级不同,方法热点也会变换。

2》 J2EE 相关的调用

JDBC calls 

显示的热点为JDBC 调用。需要在profiling settings中设置为可用。

JMS calls 

显示的热点为JMS 调用。需要在profiling settings中设置为可用。

JNDI calls 

显示的热点为JNDI 调用。需要在profiling settings中设置为可用。

URL invocations 

显示的热点 URL调用。需要在profiling settings中设置为可用。在profiling settings中,你需要指定是所有的URL都被显示,还是调用一个未过滤类的URL才会被显示,默认为后者。

3.3.3调用图(Call graph)

调用图静态地显示所选择节点计算出线程调用图。节点可以为方法、类、包或 J2EE组件。

计算调用图,点击工具栏中的 Generate graph或者选择 View->Generate graph 。

在图形计算之前,会启动调用图向导。结果图形是静态的,并能够重新计算。调用图向导会记录你最近一次的选项。

调用图向导如下:

第一步:选择图选项(后期补图)

调用图能够为所有线程、一个线程组和单个线程的所有集成等级生成调用图。线程状态选择可以控制在调用图中显示的时间含义。如在线程状态中,选择了 Runnable,在调用图中,Total Time表示的就是线程处于 Runnable的时间。

第二步:选择第一个节点:选择生成调用树的首节点,点击完成,生成调用树。(后期补图)

3.4 线程视图

3.4.1线程历史视图

按照线程开始的顺序显示 JVM中所有线程状态的详细历史信息在视图左手点,线程的名字固定显示,其它部分是滚动度量工具,在水平轴上显示时间。时间轴的开始时间与 JVM的第一个线程的时间保持一致。每个活动的线程用带颜色的线标明,从线程开始到线程结束。颜色标识线程的状态:

绿色

绿色表明线程正在运行并能接收 CPU时间。不表明线程正在消耗 CPU时间,只表明线程准备运行并且没有阻塞或睡眠。线程被分配了多少 CPU时间,依赖于不同的其它因素,如总的系统负载,线程优先级和调度的运算法则

橙色

橙色表示线程在等待。线程正在睡眠并等待计时器或其它线程唤醒

红色

红色表示线程阻塞。线程尝试进入同步代码区或由其它线程控制的同步方法

蓝色

亮蓝色表示线程在 Net I/O操作,线程在等待 JAVA库的网络操作完成。在线程监听 socket连接或者等待读写数据到 socket中时,会产生这种状态。

在视图的顶部,有一个线程过滤器,你可以按以下方法进行过滤:

1》活动状态 liveness status

活动的和死线程 Both alive and dead threads

只显示活动的线程
只显示死线程

2》名称

在文本框中,你可以输入线程的全名或部分名称进行过滤。也可以使用通配符(“” and “?”)选择线程组。可以用逗号隔开多个过滤项进行过滤,如 AWT-, MyThreadGroup--Daemon.

线程历史视图有两种显示模式:

固定时间范围      fixed time scale 

此种模式下,时间轴的刻度一直保持不变,如果显示超出屏幕范围,可以使用滚动条查看,如果视图是在自动跟踪模式下,刚总是显示当时时间下的图形。也可以使用 zooming in或 zooming out来调整显示的范围。

固定窗口范围      scale to fit window 

此种模式下,在当前视图中会显示整个时间段的图形。Zooming在此模式下不能使用

3.4.2线程监控视图

显示当前运行的线程列表以及相关的时间和状态信息。

显示的六列:

名称      Name 

显示线程名称,如果线程没有被特别命名,则使用 JVM提供的名称。想让此视图更加有用,最好将你自己创建的线程使用 setName() 进行命名。

组      Group 

显示与此线程相关的线程组的名称

Start time 

显示线程开始的时间,时间是根据 JVM中第一个线程创建的时间还计算的。

End time 

只有在 view settings设置了显示死线程时才能看到这一列,显示线程死去的时间,或者线程还活着但成为空线程的时间,时间是根据 JVM中第一个线程创建的时间还计算的。

CPU time 

显示线程消耗的 CPU时间

Note: CPU时间一列,只有在profiling settings中的Miscellaneous栏中设置CPU time

type 为Estimated CPU times ,并且当你记录CPU数据时,CPU时间才会被度量,否则CPU时间一栏总是空的。

如果你的系统和 JVM不支持线程特定的 CPU时间报告,这栏也是空的

Creating thread 

显示线程的名字和创建此线程的线程组。

Status 

显示线程的状态,相当于线程历史视图中的状态报告

如果你监控的是 JAVA1.5或以上版本(JVMTI),在屏幕的上半部分就显示上面的表,屏幕的下半部分显示所选线程的线程创建堆栈跟踪。堆栈跟踪只有线程创建时记录CPU数据才会显示。

3.4.3死锁检测图形

JVM中所有死锁的图形化显示.

正常的状态如果没有死锁,就显示”No deadlocks detected”

死锁根据以下情况进行分析:

在     JAVA平台上建立的最初的同步机制,如:使用同步的关键词
在     java.util.concurrent包中的锁机制,不使用对象的监控而是不同的实现机制

死锁检测图形有以下特征:

1》在死锁中的线程以紫色的矩形表示。矩形包括以下信息:

线程名
线程组(括号括起来)

2》在死锁中的监视器以灰色的矩形表示,包括以下信息:

监控的类
可以用来继续跟踪的监控  ID 

3》监控器的所有权用实线箭头表示。箭头指向从线程到监控器。想要了解详细信息,把鼠标停留到箭头上,可以看到提示窗口

4》导致线程死锁的阻塞原因使用虚线箭头来表示。前头指向从阻塞线程到线程想进行的监控器

3.4.4当前监控使用视图

显示当前等待和阻塞的操作

显示以下 6列:可排序

时间      Time 

事件起始时间

Duration 

事件持续时间,事件必须还在进行中

 Type 

事件类型, “waiting” 或”blocked”中的一种

Monitor ID 

在特定的监控实例上识别多个事件的 ID

Monitor class 

监控器的类。如果没有 JAVA对象与此监控器相关联,刚显示 [raw monitor]

Waiting thread 

事件中正在或过去在等待的线程

3.4.5监控使用历史视图

显示监控中等待和阻塞的操作

3.4.6监控使用统计

显示监控使用的统计信息

点击工具栏上的 Calculate statistics,或者选择 View->Calculate statistics。

在统计开始前,会打开一个monitor usage statistics options对话框,统计结果表是静态的,并能重新计算

包级别的统计表包含下面 5列:

1》Monitors/Threads/Classes

在统计对象框中按分组标准显示名称

2》Block count

在此监控组中,阻塞操作的频繁程度

3》Block duration

在此监控组中,所有阻塞操作的累积的待续阻塞时间

4》Wait count

在此监控组中,等待操作的频繁程度

5》Wait duration

在此监控组中,所有等待操作的累积的待续等待时间

3.5 VM遥感监测视图

3.5.1堆(Heap)

显示最大的堆大小以及堆中已使用的和未使用的空间大小。可以显示线性图和区域图

3.5.2对象(Objects)

显示堆上对象的总数,分为数组和非数组。可以显示线性图和区域图

3.5.3垃圾回收(Garbage collector)

显示垃圾回收活动,包括对象释放的一条线和对象移动的一条线。只显示已记录的对象,如果没有记录对象,此视图不可用

3.5.4类(Classes)

显示 JVM调用的类的总,分为过滤类和非过滤类

3.5.5线程(Threads)

显示 JVM中活着的线程总数,分为活动的线程和不活动的线程

  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
jprofiler是一款功能强大的Java性能分析工具,它可以帮助开发人员识别和解决应用程序中的性能问题。下面是使用jprofiler的简要教程: 1. 下载和安装:你可以从jprofiler官方网站(https://www.ej-technologies.com/products/jprofiler/overview.html)下载适用于你的操作系统的安装包。安装过程与常规软件安装相似,按照提示进行操作即可。 2. 启动jprofiler:安装完成后,找到jprofiler的安装目录并运行jprofilerWindows系统下是jprofiler.exe)。在启动界面中,选择"New Session"创建一个新的会话。 3. 选择应用程序:在新会话窗口中,选择你要分析的Java应用程序。可以选择本地应用程序(Local Application)或者远程应用程序(Remote Application)。 4. 配置连接参数:如果你选择了远程应用程序,需要配置连接参数。输入目标应用程序的主机名、端口号以及其他必要的信息。如果是本地应用程序,则可以跳过此步骤。 5. 启动应用程序:点击"Start"按钮启动应用程序。 6. 分析性能:一旦应用程序启动,jprofiler将开始收集性能数据。你可以使用jprofiler提供的各种功能来分析应用程序的性能,例如实时监视应用程序的CPU使用率、内存使用情况、线程活动等。你还可以生成报告、查看调用栈、检查对象分配和垃圾回收等。 7. 优化应用程序:根据jprofiler提供的性能数据和分析结果,你可以识别出应用程序中的性能瓶颈和问题,并进行优化。你可以尝试优化代码、减少内存占用、优化数据库查询等。 以上是一个简要的jprofiler使用教程,希望对你有帮助!如果你有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值