Jprofiler使用介绍

更新时间:2024-06-16 14:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 、 说明

改善 Java 服务器的性能需要模拟负载下的服务器。创建一个模拟环境、搜集数据并且分析结果可能是对许多开发人员的挑战。这里介绍了使用 JProfiler 跟踪分析 Java 服务器的性能。

简单的性能问题很容易分离并解决,然而,大的性能问题,如内存溢出或者系统的罢工,通常在系统处于高负载情况下发生,就不能这么简单的处理了。这些问题需要一个独立的测试环境、一个模拟的负载,并且需要仔细地分析和跟踪。

2 、改善服务器的性能

服务器的性能改善是依赖于数据的。没有可靠的数据基础而更改应用或环境会导致更差的结果。分析器提供有用的 Java 服务器应用信息,但由于从单用户负载下的数据与多用户负载下得到的数据是完全不同的,这导致分析器的数据并不精确。在开发阶段使用分析器来优化应用的性能是一个好的方式,但在高负载下的应用分析可以取到更好的效果。

在负载下分析服务器应用的性能需要一些基本的元素: 1、 可控的进行应用负载测试的环境。 2、 可控的人造负载使得应用满负荷运行。

3、 来自监视器、应用和负载测试工具自身的数据搜集。 4、 性能改变的跟踪。

不要低估最后一个需求(性能跟踪)的重要性因为如果不能跟踪性能你就不能实际的管理项目。性能上 10-20% 的改善对单用户环境来说并没有什么不同,但对支持人员来说就不一样了。 20% 的改善是非常大的,而且通过跟踪性能的改善,你可以提供重要的反馈和持续跟踪。

虽然性能跟踪很重要,但有时为了使后续的测试更加精确而不得不抛弃先前的测试结果。在性能测试中,改善负载测试的精确性可能需要修改模拟环境,而这些变化是必须的,通过变化前后的负载测试你可以观察到其中的转变。

3 、 分析器原理

现在几乎所有的分析器都是从同一个起点和约束开始的: Java 虚拟机分析器界面 (JVMPI) ( 参考 \Interface\ 。 Sun 微系统的 API 允许工具开发商接口或者连接到遵循 JVMPI 的 JVM 上,并且监控运作的方式以及 JVM 运行任何 Java 程序时的关键事件 -- 从单独的应用程序到 Applet 、 Servlet 和企业 JavaBeans (EJB) 组件。

在分析器内启动一个程序意味着生成、捕捉、和观察大量数据,所以所有的分析器都包含着不同的方法来控制数据的流动,在不同的标准以及每一封装包的基础上进行过滤。同样 也可以使用灵活的正规表达式类型模式来完成。

4 、 JProfiler 简介

是一个全功能的 Java 剖析工具( profiler ),专用于分析 J2SE 和 J2EE 应用程序。它把 CPU 、执行绪和内存的剖析组合在一个强大的 应用中。 JProfiler 可提供许多 IDE 整合和应用服务器整合用途。 JProfiler 直觉式的 GUI 让你可以找到效能瓶颈、抓出内存漏失 (memory leaks) 、并解决执行绪的问题。它让你得以对 heap walker 作资源回收器的 root analysis ,可以轻易找出内存溢出; heap 快照( snapshot )模式让未被参照( reference )的对象、稍微被参照的对象、或在终结( finalization )队列的对象 都会被移除;整合精灵以便剖析浏览器的 Java 外挂功能。

5 、 JProfiler 特征

5.1 内存剖析 Memory profiler

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

所有对象

显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。

?

?

记录对象 Record objects

显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。

?

分配访问树 Allocation call tree

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

?

分配热点 Allocation hot spots

显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。

5.2 堆遍历 Heap walker

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

类 Classes

显示所有类和它们的实例。

?

?

分配 Allocations

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

?

索引 References

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

?

数据 Data

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

?

时间 Time

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

5.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组件开始的访问队列的图。

5.4 线程剖析 Thread profiler

对线程剖析,JProfiler提供以下视图: 线程历史 Thread history

显示一个与线程活动和线程状态在一起的活动时间表。

?

?

线程监控 Thread monitor

显示一个列表,包括所有的活动线程以及它们目前的活动状况。

?

死锁探测图表 Deadlock Detection 显示一个包含了所有在JVM里的死锁图表。

?

目前使用的监测器 Current monitor useage 显示目前使用的监测器并且包括它们的关联线程。

?

历史检测记录 History usage history 显示重大的等待事件和阻塞事件的历史记录。

?

监测使用状态 Monitor usage statistics 显示分组监测,线程和监测类的统计监测数据。

5.5 VM 遥感勘测技术 VM telemetry

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

堆 Heap

显示一个堆的使用状况和堆尺寸大小活动时间表。

?

?

记录的对象 Recorded objects

显示一张关于活动对象与数组的图表的活动时间表。

?

垃圾回收 Garbage collector

显示一张关于垃圾回收活动的活动时间表。

?

类 Classes

显示一个与已装载类的图表的活动时间表。

?

线程 Threads

显示一个与动态线程图表的活动时间表。

6 使用介绍

6.1 JProfiler's start center

使用JProfiler's start center,你可以创建新的会话,编辑已有会话或者打开已保存的会话。在菜单中选择session start center ,有以下四个标签:Open session、New session、Convert session和Open snapshot。也可以在工具栏中点击图标打开start center。

6.1.1Open session

在start center 中,打开Open session标签,在窗口中显示所有预

先定义的会话,如图:

你可以选择一个会话,点击OK来打开预定义的会话。 会话也可以被修改、复制、删除和排序。

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

6.1.2New session

会话能够通过两种途径创建: ",人工配置:使用 [New session] 按钮手工配置一个新的

session,配置完成后,开始运行 ",通过集成向导:使用集成向导上的三个按钮:[New server

integration] 、[New remote integration]和[New applet integration] 。 ",会话创建完成后可以立即运行。在Open session标签页中能够看

到新建的会话。

6.1.2.1 New Session

点击New Session按钮,显示Application Settings窗体,关于Application Settings配置,请参见2管理session

可以在菜单中选择Session",New Session,打开New Session 窗体

6.1.2.2 New server integration

点击New server integration按钮,打开集成向导,引导你将JProfiler与本地或远程的应用服务器进行集成,步骤:

第一步、 选择需要集成的应用服务器

如果你所使用的应用服务器不在列表中,则选择“Generic application sever ”,并点击“下一步”;如图:

第二步、 选择要集成的应用服务器地址

选择要集成的应用服务器是本地的,还是远程的。如果你选择过程计算机,在选择的计算机上必须安装JProfiler,并选择远程计算机的操作系统,点击“下一步”如图:

第三步、 指定远程地址

输入远程计算机的IP地址或DNS名称,点击下一步。如图:

第四步、 指定远程安装目录

所选远程计算机上必须安装JProfiler,如果未安装,请先安装。如果已经安装,请输入安装目录,点击下一步。如图:

第五步、 选择启动脚本

选择所集成的应用服务器的启动脚本,如,TOMCAT在WINDOW下常用的启动脚本为start.dat。如果脚本是远程的,你必须有远程计算机磁盘的可写权限,或者将启动脚本拷贝到本地。

第六步、 选择JVM提供商,版本和模式

当你选择JAVA版本时,系统会自动选择推荐的模式

第七步、 选择监测的连接端口

JProfiler GUI 前端通过指定的端口连接被监测的JVM,默认端口为8849。请不要选择常用的端口,如80或8080。

第八步、 是否等待JProfiler GUI

在开发环境,建立选择第一项,很容易修改监测设置;如果你选择不等待,在启动应用服务器之前要先配置监测设置。VM参数依赖于JProfiler配置文件的位置; 配置文件要与远程计算机上的保持同步。

第九步、 检查需求通知

集成向导完成配置,所有必须的信息会进行通知,请检查,点击下一步。如图:

第十步、 完成 选择是否立即运行

6.1.3Convert session

可能转换已经存在的本地的 session 成为远程session或者是offline profiling sessions

6.1.4 Open snapshot

可以通过打开*.jps文件来打开原来保存过的session

6.2 管理session

6.2.1 Application settings dialog

6.2.1.1 session名

可以根据自己的需要给session命名

6.2.1.2 session类型

Local sessions:

Remote sessions

可以连接由JPofiler剖析代理启动的应用。剖析代理监听的默认端口是8849

2.1.2.3Applet sessions

用来剖析applets,你需要提供包含applet的HTML页面的URL

2.1.2.4 Web Start sessions

也可以剖析Java Web Start 应用,只需要给出JNLP 文件的URL或者选择一个缓冲应用

6.2.2 Profiling settings

6.2.2.1 Adjusting call tree collection options

dynamic instrumentation(动态获取)

选择动态获取,在JVM加载类时,JProfiler 修改所有未过滤的类的字节码。JAVA 核心类(java.*)会自动被过滤掉,无法剖析。动态获取比取样式更加精确。

sampling

JProfiler 定期检查所有线程调用的堆栈数。即使不进行过滤,取样方式也会快很多,但精通性很低并且不能实时显示 取样周期可以在1-20 ms间调整。如果取样太频繁,会导致CPU占用过高。

full instrumentation(全部获取)

所有的方法调用都会被跟踪,这样可以监控到JAVA核心类(java.*),但比动态获取慢,尤其是1.4 JVMs 。在1.5 JVMs (JVMTI)中不能使用。 使用全部获取你可以随意地显示具体的类调用的方法而不是某个方法在哪个类中实现。

活动过滤设置( active filter sets )

??Exclusive(独占的)

在下表中,你为会话选择哪些过滤集是活动的。这些过滤器指定CPU监控的结束点。在包或类中匹配过滤集中的某一个,进一步的调用其它被过滤的类将在调用第一个被过滤的方法时失败。在被过滤的类中,方法是不透明的并且在call tree view中标为红色.

过滤集可以在general settings的\标签中设定。

??Inclusive(包含的)

输入逗号分隔类和包的过滤器。在CPU监控中,只有符合这些包或类的调用才能够被显示。

例如,如果你指定com.mycorp.,com.othercorp. 作为一个包含的过滤器,一个调用com.mycorp.MyClass.myMethod() 和它做的所有调用才会被度量和显示。而所有从 com.mycorp.MyClass.myMethod() 发起的调用都不属于包com.mycorp 和com.othercorp ,它们是不透明的并且在call tree view.标识为红色。

6.2.3 JAVA 子系统

在此标签下,你可以选择JProfiler如何记录J2EE相关的JAVA子系统。 ",记录服务调用

JProfiler 使用仪器监控几个J2EE服务层并记录象服务调用的执行时间等语义数据。记录仪器不需要依赖,可以为所有驱动或服务提供商工作。服务调用在call tree view中有解释并且可以在hot spot view选为热点。 下面的服务类型可以被单独激活: ",JDBC calls ",JMS calls

JNDI calls ",J2EE awareness

如果选择了Split call tree for each request URL , JProfiler将分析调用servlets 和 JSPs的URL。针对每个URL,在call tree中都创建一个新的节点。URL也能够在hot spot view选择成了一个热点类型。这样做的话,你可以在单独的页面或请求中区分性能问题。

缺省,只有没有查询参数的URL会使用上面的分离进程。为了在call tree中保留选择的参数,你可以在retained request parameters文本框中输入要保留的参数。

如果要显示所有的请求,请选择Show request URLs that are outside the call tree.

6.2.4 features

",Enabled profiling features

在此标签中,你可以调整监控的属性,以提高软件执行速度,减少内存使用。

Disabled profiling features

Disable call tree collection When you record CPU data or allocations, JProfiler collects information about the call tree. You might want to record allocations without the overhead of recording the allocation call stacks: If you don't need the allocation view in the heap walker, the allocation call tree and the stack trace information in the monitor usage views, you can

switch off call tree collection. This will speed up profiling considerably and reduce memory usage.

Disable monitor contention views if you are not interested in monitor contention events, you may switch data collection off by selecting this checkbox to lower the memory consumption of the profiled application. If monitor contention views are enabled, the following settings govern the level of detail for the monitor contention views:

",Monitor contention threshold

Select the minimum time threshold in microseconds (μs) for which a monitor contention (i.e. when a thread is blocking) is displayed in the monitor usage history view.

",Monitor waiting threshold Select the minimum time threshold in microseconds (μs) for which a monitor wait state (i.e. when a thread is waiting) is displayed in the monitor usage history view.

? Allocation call tree The information depth of the allocation call tree and the allocation hot spots view is governed by this setting.

Live objects By default, only live objects can be displayed by the allocation views. Class-resolution is enabled.

Live and GCed objects without class resolution Live and garbage collected objects can be displayed by the allocation views, depending on the selection in the allocation options dialog. Class-resolution is disabled, i.e. class selection in the allocation options dialog will not work in this setting, only the cumulated allocations of all classes and array types can be displayed. This setting consumes more memory than the first setting and adds a considerable performance overhead.

Live and GCed objects Live and garbage collected objects can be displayed by the allocation views, depending on the selection in the allocation options dialog. Class-resolution is enabled. This setting consumes more memory than the other settings and adds adds

a considerable performance overhead.

Select record object allocation time if you would like to be able to

o use the time view in the heap walker

o sort objects by allocation time in the reference graph and the data view of the heap walker.

o See allocation times for the current objects in the reference graph and the data view of the heap walker.

This setting consumes more memory for recorded objects.

? Call tree By default, JProfiler does not resolve line numbers in call trees. If you enable show line numbers for sampling and dynamic instrumentation, line number resolution will be enabled for the call tree collections modes of \and \instrumentation\For \available.

If the aggregation level is set to \another method multiple times in different lines of code, line number resolution will show these invocations as separate method nodes in the call tree and the allocation call tree. Backtraces in the hotspot views will also show line numbers.

Note that a line number can only be shown if the call to a method originates in an unfiltered class.

6.3 监测视图

6.3.1 内存视图

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

6.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 中配置的所有类;如果正在记录不同的对象类型,所以的记录数据被清空

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

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

6.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切换三种模式

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

6.3.1.3 分配调用树(Allocation call tree )

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

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

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

6.3.1.5 类跟踪(Class tracker)

6.3.2 堆遍历(Heap Walker)

6.3.2.1 类(Classes)

显示所有类和它们的实例

6.3.2.2 分配(Allocations)

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

6.3.2.3 索引(References)

为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显

示功能。还能提供合并输入视图和输出视图的功能

6.3.2.4 数据(Data)

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

6.3.2.5 时间(Time)

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

6.3.3 CPU视图

6.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数据获取来清空调用数,也可以冻结所有视图让调用数保持静态

6.3.3.2 热点视图(Hot spot view)

热点视图显示选择类型的调用列表。截去了占总时间小于0.1%的点。 热点类型\下拉中可选择,包括两种:

",方法调用(method calls)

",method calls (show filtered classes separately)

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

method calls (add filtered classes to calling class)

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

根据你选择的集合体等级不同,方法热点也会变换。 ",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才会被显示,默认为后者。

6.3.3.3 调用图(Call graph)

调用图静态地显示所选择节点计算出线程调用图。节点可以为方法、类、包或J2EE组件。 计算调用图,点击工具栏中的Generate graph或者选择View->Generate graph 。

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

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

第二步:选择第一个节点:选择生成调用树的首节点,点击完成,生成调用树。

系统提供工具栏,可以对图形进行不同的显示操作。

选择图展现方式,包括四种方式:

1) 按等级展现

2) 按等级展现(由上到下) 3) 组织式展现 4) 正交展现

还可以选择一个节点,右键,显示的图形如下:

与屏幕右方显示的工作栏中基本操作一样,一些不同的,下面说明。Show Source:显示此方法或类的源代码,如下图。

Show Bytecode:显示此方法或类的字节码,如下图:

6.3.4 线程视图

6.3.4.1 线程历史视图

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

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

橙色

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

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

蓝色

亮蓝色表示线程在Net I/O操作,线程在等待JAVA库的网络操作完成。在线程监听socket连接或者等待读写数据到socket中时,会产生这种状态。 在视图的顶部,有一个线程过滤器,你可以按以下方法进行过滤:

活动状态liveness status 活动的和死线程Both alive and dead

threads ",只显示活动的线程

本文来源:https://www.bwwdw.com/article/d103.html

Top