当前位置: 首页 > news >正文

JProfiler —CPU评测

    当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后,匹配项将突出显示,搜索选项可用。使用“向上箭头”和“向下箭头”键,您可以在不同的匹配中循环。 

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

六、火焰图

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

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

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

 

 

相关文章:

JProfiler —CPU评测

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

994. 腐烂的橘子

994. 腐烂的橘子(面试题打卡/前缀和/简单) 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/rotting-oranges/ 题干: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:…...

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类,使项目更易于管理,而对象则是一个个孤岛,你可以集中精力分别处理…...

Windows11环境下VS2019调用Pytorch语义分割模型(C++版)

语义分割模型在训练时往往采用python脚本进行网络搭建和训练,并获得训练好的模型。为了提高效率方便整个工程项目部署,实际工程应用中通常希望使用C编程语言调用训练好的网络模型。查询大量网络资料并踩过无数坑后,经实际测试实现了在window1…...

Milkv Duo 以太网使用与配置

网络配置 使能网卡 使用ip link查看是否存在eth0网卡,若无使用如下命令使能网卡: ip link set eth0 up两次使用ip link确认网卡eth0已经使能。 配置IP、gws 本人设备连接到华为路由器下,故增加如下路由信息: ip route add d…...

bash: make: command not found

make之后报错信息如下:cd 对应的文件路径后 make 发现报错:bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…...

热点如何用于期刊写作——以chatGPT为例

交叉领域A,B 以自己为例子,A是教育 B是技术,我是教育技术学专业。 经验来源 知网关于GPT的140余篇专业论文的观察 截止至2023年8月14日15:35:45 学习每出现一个热点,如何应用于学术。 实践阅读发现 套路一:谈理论…...

IGV.js 的完全本地化运行探索

问题及解决方法 IGV.js 完全本地化是为了合规,不使用外网的情况下查看基因组。不联网需要下载 genomes.json 文件及其中的内容之外,还需要修改 igv.js本身,防止5s超时后才显示网页内容。修改的关键词是: genomes.json,改为本地的…...

网络安全渗透测试之靶场训练

NWES: 7月26号武汉地震检测中心遭受境外具有政府背景的黑客组织和不法分子的网络攻击。 目前网络攻击主要来自以下几种方式: DDOS:分布式拒绝服务攻击。通过制造大量无用的请求向目标服务器发起访问,使其因短时间内无法处理大量请求而陷入瘫痪。主要针对…...

Java课题笔记~ Spring 的事务管理

一、Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层。但一般情况下,需要将事务提升到业务层,即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。 在 Spring 中通常可以通过以下两种方式来实现对事务的管理&#xff…...

仿到位|独立版家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单源码

上门预约服务派单小程序家政 小程序 同城预约 开源代码 独立版. 程序完整,经过安装检测,可放心下载安装。 适合本地的一款上门预约服务小程序,功能丰富,适用多种场景。 程序功能:城市管理/小程序DIY/服务订单/师傅管理/会员卡功能/营销功能/文章功能等等...

Observability:识别生成式 AI 搜索体验中的慢速查询

作者:Philipp Kahr Elasticsearch Service 用户的重要注意事项:目前,本文中描述的 Kibana 设置更改仅限于 Cloud 控制台,如果没有我们支持团队的手动干预,则无法进行配置。 我们的工程团队正在努力消除对这些设置的限制…...

接口测试及接口抓包常用的测试工具

接口 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 接口测试的重要性 是节省时间前后端不…...

CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104 Linux串口驱动使用教程

CH343 Linux串口驱动 ch343ser_linux 支持USB转串口芯片 ch342/ch343/ch344/ch347/ch9101/ch9102/ch9103/ch9104等 ,同时该驱动配合ch343_lib库还提供了芯片GPIO接口的读写功能,内部EEPROM的信息配置和读取功能等。 芯片型号串口数量GPIO数量CH342F/K2C…...

反射和工厂设计模式---工厂设计模式

一、工厂设计模式概述 ■什么是工厂设计模式 工厂模式(Factory Pattern)是开发中比较常用的设计模式之一。 它属于创建型模式(单例模式就是创建型模式的一种),这种模式让我们在创建对象时不会直接暴露创建逻辑,而是通过使用一个共同的接口来完成对象的…...

【算法——双指针】LeetCode 283 移动零

题目描述: 思路: (双指针) O(n)O(n)O(n) 给定一个数组 nums,要求我们将所有的 0 移动到数组的末尾,同时保持非零元素的相对顺序。 如图所示,数组nums [0,1,0,3,12],移动完成后变成nums [1,3,12,0,0] &am…...

腾讯云轻量服务器和云服务器的CPU处理器有差别吗?

腾讯云轻量应用服务器和CVM云服务器的CPU处理器性能有差别吗?创建轻量应用服务器时不支持指定底层物理服务器的CPU型号,腾讯云将随机分配满足套餐规格的物理CPU型号,通常优先选择较新代次的CPU型号。而云服务器CVM的CPU处理器型号、主频都是有…...

Redis_亿级访问量数据处理

11. 亿级访问量数据处理 11.1 场景表述 手机APP用户登录信息,一天用户登录ID或设备ID电商或者美团平台,一个商品对应的评论文章对应的评论APP上有打卡信息网站上访问量统计统计新增用户第二天还留存商品评论的排序月活统计统计独立访客(Unique Vistito…...

Java-类型和变量(基于C语言的补充)

一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…...

机器学习笔记:李宏毅diffusion model

1 概念原理 首先sample 一个都是噪声的vector然后经过denoise network 过滤一些杂质接着继续不断denoise,直到最后出来一张清晰图片 【类似于做雕塑,一开始只是一块石头(噪声很杂的雕塑),慢慢雕刻出想要的花纹】 同一个…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...