【软件构造】课件精译(二十) 动态性能分析方法与工具

2024-03-01 20:32

本文主要是介绍【软件构造】课件精译(二十) 动态性能分析方法与工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、动态程序分析

动态程序分析:根据程序的一次或多次执行的过程与结果,分析代码在时空性能方面所展现出的性质
静态与动态分析
在这里插入图片描述
为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为。
通过分析代码覆盖度,确认动态分析是否已经足够。
要尽可能小的影响程序原本的执行,否则性能测量不准确 。
测量某事物的行为将会不可避免的干扰/扰乱它,从而改变它的状态。
Example 1:程序热点
每个程序实体(语句、分支、路径、方法等)的执行概率/频度是多少?
80-20原则:20%的程序负责80%的执行时间
目标:性能调优、性能分析驱动的编译、逆向工程
Example 2:路径分析
在这里插入图片描述

二、程序剖析:概念和方法

剖析器
利用剖析器检测源代码或执行程序以获取信息,用于代码过于庞大而难以阅读剖析的情况
这个工具可以用来评估代码在新架构上的表现,发现代码的关键区域以及指令调度或分支预测算法的执行情况
剖析器的输出
所观察到的程序执行事件的统计结果,同代码量相关
在这里插入图片描述
输出一个事件流,事件跟踪同指令路径长度相关
在这里插入图片描述
实时或周期性的获取/展示程序运行过程中的数据,提供了在执行期间在任何期望的点处开启或关闭trace的机会,提供了在关键点暂停异步进程以更详细地检查与其他并行进程的交互
在这里插入图片描述
平面剖析器根据调用计算平均调用时间,并且不根据被调用者或上下文分解调用时间。
调用图剖析器显示调用时间,功能的频率,以及基于被调用者所涉及的调用链。 在某些工具中,不保留完整的上下文。
输入敏感性剖析通过将性能度量与输入工作负载的功能相关联(例如输入大小或输入值),为平面或调用图剖析器添加更多维度。 它们生成的图表表征应用程序的性能如何根据其输入进行扩展。
剖析方法
剖析器可以使用许多不同的技术,例如基于事件的,统计的,仪表化的和模拟的方法。在收集数据方面,剖析器采用硬件中断、代码指令、指令集模拟、操作系统挂钩、性能计数器
剖析器通常采用以下三种方法:

(1)代码注入/代码插入

在原始程序中加入某些语句来收集运行时数据,这些语句不改变原程序的语义,但对原程序的性能有了轻微改变
在源代码中注入较为简单,在目标代码(.o与.class)中较为困难

Pros:可以被很多平台使用,在某些意义上比较准确,无法比较容易地做内存剖析
Cons:需要修改程序;注入代码可能影响测试结果

(2)采样

以特定的频率观察程序执行在特定时刻所展现出的行为与状态
采样:周期性监控被测程序,存储各时刻的快照
基于收集到的数据,分析程序当时所处的状态,分析性能

Pros:不需要修复程序
Cons:需要在采样频率和准确度之间折中;可能漏掉“小”的方法;难以监控内存使用情况

(3)借助于虚拟机获取程序性能数据

利用虚拟机进行性能监控,所有JVM执行的指令都被记录下来

Pros: 非常准确,可监控时空两方面的性能
Cons: 与VM绑定,不同VM需要提供不同的测量工具

三、程序剖析工具

(1)命令行剖析工具

jstat:获取JVM的heap使用和GC的性能统计数据
在这里插入图片描述
在这里插入图片描述
jmap:输出内存中的对象分布情况
jmap -dump:format=b,file=filename causes jmap to dump the Java heap in binary format to a specified file. 导出heap dump

jmap -histo for obtaining a class specific histogram(柱状图) of the heap. 获取堆中类的特定柱状图
在这里插入图片描述
在这里插入图片描述
jhat:导出heap dump,浏览/查询其中的对象分布情况
jhat是heap dump文件的浏览和查询工具
在这里插入图片描述
OQL(Object Query Language)
在这里插入图片描述

jstack:获取Java线程的stack trace
在这里插入图片描述
jstack为给定的Java进程或核心文件或远程调试服务器打印Java线程的堆栈跟踪
主要用途:
定位线程出现长时间停顿的原因,如多线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
在这里插入图片描述
jps (JVM Process Status Tool) 虚拟机进程状况工具: 列出当前运行的JVM 进程

jMC:Java Mission Control是一个剖析、检测和诊断的工具集

(2)JConsole

JConsole图形用户界面是一个监视工具,提供有关Java平台上运行的应用程序的性能和资源消耗的信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)VisualVM

VisualVM是一个工具,它提供了一个可视化界面,用于在JVM上运行时查看有关Java应用程序的详细信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Visual GC
在这里插入图片描述

四、内存分析器(MAT)

Eclipse Memory Analyzer是一个快速且功能丰富的Java堆分析,可帮助您查找内存泄漏并减少内存消耗。——内存堆导出文件的分析工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
浅堆和保留的堆
浅堆:某个对象消耗的实际内存
保留的堆:如果某对象被GC,所释放的内存
对象的浅堆是其在堆中的大小,而保留的大小是在对象被垃圾回收时将释放的堆内存量。
Outgoing references:该对象所引用的其他对象
Incoming references:引用该对象的其他对象
Group by class loader, packages or superclass
支配树:支配树展示了内存导出文件中最大的对象
在这里插入图片描述
如果对象图从开始(或根)节点到y的每个路径都必须经过x,则对象x支配对象y
某个对象y的直接支配者x是最靠近对象y的支配者
在支配树中,每个对象都是子对象的直接支配者,所以对象之间的依赖关系很容易被识别出来。
支配树具有以下重要属性:
属于x的子树的对象(即由x支配的对象)表示保留的x组。
如果x是y的直接支配者,那么x的直接支配者也支配y,依此类推。
支配树中的边不直接对应于来自对象图的对象引用。
在这里插入图片描述
在这里插入图片描述
Querying Heap Objects (OQL)
SELECT * FROM [ INSTANCEOF ] < class name=“name” > [ WHERE < filter-expression > ] < /filter-expression >< /class >
MAT允许使用自定义类SQL查询来查询堆转储。 OQL将类表示为表,将对象表示为行,将字段表示为列。
内存泄露分析
对问题发生时刻的系统内存状态获取一个整体印象。
找到最有可能导致内存泄露的元凶,通常是消耗内存最多的对象
进一步查看内存消耗最大的类/对象的具体情况,看是否有异常行为。

这篇关于【软件构造】课件精译(二十) 动态性能分析方法与工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763710

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2