JProfiler —CPU评测

news2024/11/24 12:04:50

    当JProfiler测量方法调用的执行时间及其调用堆栈时,我们称之为“CPU评测”。这些数据以多种方式呈现。根据你试图解决的问题,其中一个或另一个演示将是最有帮助的。默认情况下不会记录CPU数据,您必须打开CPU记录才能捕获有趣的用例。

一、调用树

跟踪所有方法调用及其调用堆栈将消耗大量内存,并且只能保持很短的时间,直到所有内存耗尽。此外,在繁忙的JVM中直观地掌握方法调用的数量并不容易。通常,这个数字太大了,无法定位和跟踪轨迹。
另一个方面是,许多性能问题只有在收集到的数据被聚合后才会变得清楚。通过这种方式,您可以判断方法调用在某个时间段内对整个活动的重要性。对于单个跟踪,您不知道所查看的数据的相对重要性。
这就是为什么JProfiler构建了一个所有观察到的调用堆栈的累积树,并用观察到的时间和调用计数进行注释。删除了按时间顺序排列的部分,只保留了总数。树中的每个节点表示一个调用堆栈,该堆栈至少被观察一次。节点具有代表在该调用堆栈中看到的所有传出调用的子级。

 调用树是“CPU视图”部分中的第一个视图,当您开始CPU评测时,它是一个很好的起点,因为方法调用从起点到最细粒度的终点的自上而下的视图最容易理解。JProfiler根据子级的总时间对其进行排序,因此您可以首先打开树深度来分析树中对性能影响最大的部分。

 虽然所有的测量都是针对方法执行的,但JProfiler允许您通过在类或包级别聚合调用树来获得更广泛的视角。聚合级别选择器还包含一个“JEE/Spring组件”模式。如果您的应用程序使用JEE或Spring,则可以使用此模式在类级别上仅查看JEE和Spring组件。像URL这样的拆分节点保留在所有聚合级别中。

二、调用树筛选器

如果调用树中显示了所有类的方法,则该树通常太深而无法管理。如果你的应用程序是由一个框架调用的,那么调用树的顶部将由你不关心的框架类组成,你自己的类将被深深地掩埋。对库的调用将显示其内部结构,可能有数百个级别的方法调用,这些调用您不熟悉,也无法影响。
这个问题的解决方案是对调用树应用过滤器,这样只记录一些类。作为一个积极的副作用,需要收集的数据更少,需要检测的类也更少,因此减少了开销。
默认情况下,配置分析会话时会使用一个从常用框架和库中排除的包列表。 

 当然,这个列表是不完整的,所以最好删除它并自己定义感兴趣的包。事实上,插装和默认过滤器的组合是非常不可取的,因此JProfiler建议在会话启动对话框中进行更改。

 过滤器表达式与完全限定的类名进行比较,因此com.mycorp.匹配所有嵌套包中的类,如com.mycorp.myapp.Application。有三种类型的过滤器,称为“profiled”、“compact”和“ignored”。“概要”类中的所有方法都是经过测量的。这是您自己的代码所需要的。
在“紧凑”过滤器所包含的类中,只测量对该类的第一次调用,但不显示进一步的内部调用。“Compact”是库(包括JRE)所需要的。例如,当调用hashMap.put(a,b)时,您可能希望在调用树中看到hashMap.put。
最后,“忽略”的方法根本没有被分析。由于开销方面的考虑,它们可能不适合使用,或者它们可能只是在调用树中分散注意力,例如插入动态调用之间的内部Groovy方法。
手动输入程序包容易出错,因此您可以使用程序包浏览器。在启动会话之前,包浏览器只能向您显示配置的类路径中的包,该路径通常不会覆盖实际加载的所有类。在运行时,包浏览器将显示所有加载的类。

为每个类从上到下评估配置的筛选器列表。在每个阶段,如果匹配,则当前过滤器类型可能会发生变化。什么样的过滤器从过滤器列表开始很重要。如果您从一个“profiled”过滤器开始,那么类的初始过滤器类型是“compact”,这意味着只对显式匹配进行分析。

如果您从一个“紧凑”过滤器开始,那么类的初始过滤器类型是“profiled”。在这种情况下,除了显式排除的类之外,所有类都将进行分析。

三、调用树时间

要正确解释调用树,了解调用树节点上显示的数字非常重要。任何节点都有两个有趣的时间,总时间和自身时间。自身时间是节点的总时间减去嵌套节点中的总时间。
通常,自时间很小,除了紧凑的过滤类。大多数情况下,紧凑过滤类是一个叶节点,总时间等于自身时间,因为没有子节点。有时,紧凑过滤类会调用一个配置文件类,例如通过回调,或者因为它是调用树的入口点,比如当前线程的run方法。在这种情况下,一些未编译的方法会消耗时间,但不会显示在调用树中。该时间冒泡到调用树中的第一个可用祖先节点,并为紧凑过滤类的自身时间做出贡献。 

调用树中的百分比栏显示总时间,但自身时间部分显示为不同的颜色。除非重载了同一级别上的两个方法,否则方法显示时没有其签名。有多种方法可以自定义视图设置对话框中调用树节点的显示。例如,您可能希望将自身时间或平均时间显示为文本,始终显示方法签名或更改使用的时间刻度。此外,百分比计算可以基于父时间,而不是整个调用树的时间。 

四、线程状态

在调用树的顶部,有几个视图参数可以更改所显示的分析数据的类型和范围。默认情况下,所有线程都是累积的。JProfiler在每个线程的基础上维护CPU数据,您可以显示单个线程或线程组。

 在任何时候,每个线程都有一个关联的线程状态。如果线程已准备好处理字节码指令,或者当前正在CPU核心上执行这些指令,则线程状态称为“可运行”。在查找性能瓶颈时,该线程状态是感兴趣的,因此默认情况下会选择它。
或者,线程可能正在监视器上等待,例如通过调用Object.wait()或thread.sleep(),在这种情况下,线程状态被称为“等待”。在尝试获取监视器时被阻塞的线程(例如在同步代码块的边界处)处于“阻塞”状态。
最后,JProfiler添加了一个合成的“Net I/O”状态,用于跟踪线程等待网络数据的时间。这对于分析服务器和数据库驱动程序非常重要,因为这段时间可能与性能分析相关,例如用于调查慢速SQL查询。

如果你对挂钟时间感兴趣,你必须选择线程状态“所有状态”,也可以选择一个线程。只有这样,您才能将时间与代码中调用System.currentTimeMillis()计算的持续时间进行比较。
如果您想将所选方法转移到不同的线程状态,可以使用方法触发器和“覆盖线程状态”触发器操作,或者使用嵌入或注入的探测API中的ThreadStatus类来实现。

五、在调用树中查找节点

有两种方法可以在调用树中搜索文本。首先,有一个快速搜索选项,它通过从菜单中调用View->Find或直接开始在调用树中键入来激活。按下PageDown后,匹配项将突出显示,搜索选项可用。使用“向上箭头”和“向下箭头”键,您可以在不同的匹配中循环。 

 搜索方法、类或包的另一种方法是使用调用树底部的视图过滤器。在这里,您可以输入一个逗号分隔的筛选器表达式列表。以“-”开头的筛选器表达式类似于被忽略的筛选器。以“!”开头的表达式类似于紧凑型过滤器。所有其他表达式都类似于配置文件过滤器。就像过滤器设置一样,初始过滤器类型决定了默认情况下是包括类还是排除类。
单击视图设置文本字段左侧的图标可显示视图过滤器选项。默认情况下,匹配模式为“包含”,但在搜索特定包时,“以开头”可能更合适。

六、火焰图

另一种查看调用树的方法是将其作为火焰图。通过调用关联的调用树分析,可以将整个调用树或其一部分显示为火焰图。 

 火焰图在一个图像中显示了调用树的全部内容。调用从火焰图的底部开始,并向顶部传播。每个节点的子节点排列在其正上方的行中。子节点按字母顺序排序,并以其父节点为中心。由于在每个节点中花费的自身时间,“火焰”向顶部逐渐变窄。有关节点的更多信息显示在工具提示中,您可以在其中标记文本以将其复制到剪贴板。

火焰图具有非常高的信息密度,因此可能有必要通过关注所选节点及其子节点层次来缩小显示的内容。虽然可以放大感兴趣的区域,但也可以通过双击或使用上下文菜单来设置新的根节点。当连续多次更改根时,可以在根的历史中再次向后移动。
分析火焰图的另一种方法是根据类名、包名或任意搜索项添加着色。着色可以从上下文菜单中添加,也可以在着色对话框中进行管理。第一个匹配的着色用于每个节点。除了着色之外,您还可以使用快速搜索功能来查找感兴趣的节点。使用光标键,可以在显示当前高亮显示的匹配的工具提示时循环显示匹配结果。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密码破解!字典攻击(C/C++代码实现)

字典攻击是一种通过系统地将字典中的每个单词作为密码输入,从而侵入受密码保护的计算机、网络或其他IT资源的方法。字典攻击也可以用于查找解密加密消息或文档所需的密钥。 字典攻击之所以有效,是因为许多计算机用户和企业坚持使用普通单词作为密码。这…

苏纷享首届生态人脉会成功举办,纷享销客助力伙伴共同发展

近日,纷享销客&苏纷享成功举办了首届生态人脉会,该活动于8月3日下午在苏州东方之门举行。本次会议汇聚了来自近20家企业的销售精英,包括金蝶、泛微、夏谷、蚂蚁分工、创享、黑湖智造等众多知名企业。会议秉持着“建立生态、共同发展、深耕…

软工导论知识框架(九)软件项目管理

通过计划、组织、控制一系列活动,合理配置使用资源,达到既定目标的活动。项目管理优先于任何技术之前,并且贯穿于整个软件生命周期全过程。 一.软件规模度量 1.代码行技术 估计每个功能需要源代码(参考类似项目的历史数据&#…

论文详解 ——《SNR-Aware Low-light Image Enhancement》

文章目录 Abstract1.Introduction2. Related Work3. Our Method3.1 Long- and Short-range Branches3.2 SNR-based Spatially-varying Feature Fusion3.3 SNR-guided Attention in Transformer3.4 Loss Function 4. Experiments4.1. Datasets and Implementation Details4.2 Co…

实验二十七、电压传输特性的测量

一、题目 利用 Multisim 测试图1 所示各电路的电压传输特性。 图 1 电压比较器 图1\,\,电压比较器 图1电压比较器 二、仿真注意事项 (1)仿真电路所有的 A \textrm A A 均采用虚拟电压比较器。合理选择稳压管的限流电阻,使其既稳压又不至于…

armbian使用1panel快速部署部署springBoot项目后端

文章目录 前言环境准备实现步骤第一步:Armbian安装1panel第二步:安装数据库第三步:查看数据库容器重要信息【重要】查看容器所在的网络查看容器连接地址 第四步:项目配置和打包第五步:构建项目镜像 前言 这里只是简单记录部署spr…

开源,微信小程序 美食便签地图(FoodNoteMap)的设计与开发

目录 0 前言 1 美食便签地图简介 2 美食便签地图小程序端开发 2.1技术选型 2.2前端UI设计 2.3主页界面 2.4个人信息界面 2.5 添加美食界面 2.6美食便签界面 2.8 美食好友界面 2.9 美食圈子界面 2.10 子页面-店铺详情界面 2.11 后台数据缓存 2.12 订阅消息通知 2.1…

FastApi-1-结合sql 增/查demo

目录 FastAPI学习记录项目结构部分接口/代码展示感受全部代码 FastAPI学习记录 fastapi已经学习有一段时间,今天抽时间简单整理下。 官网介绍: FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Py…

配置容器以使其自动启动

配置容器以使其自动启动 配置容器 利用注册表服务器上的 rsyslog-custom-cert 镜像,创建一个名为 logserver 的容器。 将其配置为以 systemd 服务的形式运行,且仅面向现有用户 william 。 该服务应命名为 container-logserver , 并应在系统重新引…

每日一题——二叉树中和为某一值的路径

题目 给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。 该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点叶子节点是指没有子节点的节点路径只能从父节点到子节点,不能从子节点到父节点总节点…

Coreutils工具包,Windows下使用Linux命令

之前总结过两篇有关【如何在Windows系统下使用Linux的常用命令】的文章: GnuWin32,Windows下使用Linux命令 UnxUtils工具包,Windows下使用Linux命令 今天再推荐一个类似的工具包Coreutils 一、简介 GNU core utilities是GNU操作系统基本…

HCIP——堆叠技术

堆叠 一、简介二、堆叠的优势1、提高可靠性2、简化组网3、简化管理4、强大的网络拓展能力 三、堆叠的方式1、堆叠卡堆叠2、业务口堆叠 四、堆叠的原理1、角色2、单机堆叠3、堆叠ID4、堆叠的优先级5、堆叠的建立过程 五、堆叠的配置 一、简介 堆叠技术 — 可以将多台真是得物理…

Android之版本号、版本别名、API等级对应关系(全)(一百六十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【刷题笔记8.13】【动态规划相关】LeetCode题目:斐波那契数列、爬楼梯

【动态规划相关】LeetCode题目&#xff1a;斐波那契数列、爬楼梯 &#xff08;一&#xff09;爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 提示&#xff1a; 1 < n <…

【数学建模】清风数模更新5 灰色关联分析

灰色关联分析综述 诸如经济系统、生态系统、社会系统等抽象系统都包含许多因素&#xff0c;系统整体的发展受各个因素共同影响。 为了更好地推动系统发展&#xff0c;我们需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是积极的&#xff0c;哪些是消极的…

P1123 取数游戏

取数游戏 题目描述 一个 N M N\times M NM 的由非负整数构成的数字矩阵&#xff0c;你需要在其中取出若干个数字&#xff0c;使得取出的任意两个数字不相邻&#xff08;若一个数字在另外一个数字相邻 8 8 8 个格子中的一个即认为这两个数字相邻&#xff09;&#xff0c;求…

自动驾驶数据集汇总

1.Nuscenes 数据集链接&#xff1a;nuScenes nuscenes数据集下有多个任务&#xff0c;涉及Detection&#xff08;2D/3D&#xff09;、Tracking、prediction、激光雷达分割、全景任务、规划控制等多个任务&#xff1b; nuScenes数据集是一个具有三维目标注释的大型自动驾驶数…

从AI到人机再到人机环:十年四本书

写这四本书的初衷还是得从剑桥图书馆说起&#xff0c;自从2012年来到剑桥逐渐适应了这里的环境和学术氛围以后&#xff0c;除了与朋友们聚会聊天&#xff0c;就是准备好矿泉水和面包&#xff0c;到学校各个图书馆里去看书、找书、借书了。记得那是2013年春天的一个下午&#xf…

HLS+System Generator实现FIR低通滤波器

硬件&#xff1a;ZYNQ7010 软件&#xff1a;MATLAB 2019b、Vivado 2017.4、HLS 2017.4、System Generator 2017.4 1、MATLAB设计低通滤波器 FPGA系统时钟 50MHz&#xff0c;也是采样频率。用 MATLAB 生成 1MHz 和 10MHz 的正弦波叠加的信号&#xff0c;并量化为 14bit 整数。把…