性能分析之使用 Jvisualvm dump 分析示例

news2024/11/15 4:59:17

一、前言

在 JMeter 入门系列中相信大家对工具使用已经没问题,今天开起性能测试进阶系列之 jvisualvm 工具简单学习,目标是通过演示 Jvisualvm 工具定位代码,帮助性能测试工程师直接定位代码位置,协助开发解决性能问题;

前置条件:

  • 1、本机 JDK 并且工具包中有 Jvisualvm
  • 2、本机安装JMeter
  • 3、本机能运行 idea 或者能运行 Demo 代码

二、线程状态

常见的线程状态为如下:
在这里插入图片描述

了解上面信息后,打开idea编写简单代码如下:

@GetMapping("/7d")
@ResponseBody
public R indexPage() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("success", "欢迎来到性能实战课堂");
    return R.ok().put("data", map);
}
/**
 * 运行线程
 *
 * @return
 */
@GetMapping("/runnable")
@ResponseBody
public R runnable() {
    List<MemberEntity> list = pageIndexService.selectAll();
    return R.ok().put("data", list);
}
/**
 * 运行线程
 *
 * @return
 */
@GetMapping("/sleep")
@ResponseBody
public R sleep() {
    List<MemberEntity> list = pageIndexService.selectSleepAll();
    return R.ok().put("data", list);
}

启动工程:
在这里插入图片描述

访问如下:
在这里插入图片描述

三、JMeter与Jvisualvm

打开 JMeter 并且编写脚本成功如下:
在这里插入图片描述

打开 Jvisualvm 工具选择自己启动的工程:
在这里插入图片描述

即可看到当前系统配置,点击线程标签如下图,再点击时间线标签即可按名称排序,在这里问一个问题,为什么 http-nio-8080 线程数是10个,大家可以思考下,不知道的也没关系,继续往下学习,答案会揭晓。
在这里插入图片描述
查看配置文件:application.properties 输入server.tomcat.threads-min-spare就能看的默认参数是10。
在这里插入图片描述
这个参数是否是刚才看到的线程数,咱们可以修改为5,启动工程,点击线程如下:

在这里插入图片描述
小伙伴们你们猜对了吗?如果猜对恭喜你们可以开始开启 jar 微服务工程性能参数调优,如果没有猜对的希望通过这次学习后知道怎么修改参数,目前很多工程还是tomcat工程,想问一个问题就是默认 tomcat 参数在什么地方修改,这个大家可以自己想一想在什么地方修改。

源码位置如下:
在这里插入图片描述
在这里插入图片描述

四、Jvisualvm代码定位

  • 第一步:Jmeter 压力持续执行,目的方便定位代码
  • 第二步:打开 Jvisualvm 工具点击线程结果如下:
    在这里插入图片描述
    通过上面线程可以看出目前线程开始运行,线程只有运行情况下才会消耗CPU,点击监视即可看到相关资源消耗如:
    在这里插入图片描述
    更换Jmeter请求,并且继续执行Jmeter:
    在这里插入图片描述

打开 jvisualvm 发现大量线程在 sleep 如图,大家可以想一想下一步应该做,在这一讲中主要讲解通过现象定位到代码行中,其实在做性能测试过程中,线上环境很少能用这样的工具操作一般会直接通过命令打dump之后把文件下载到本地进行分析,在线上因为会消耗性能,但是在测试环境或者对于性能学习使用工具定位能力还是需要。

如果不会分析可以学习**《性能测试实战30讲》之06丨倾囊相授:我毕生所学的性能分析思路都在这里了**
在这里插入图片描述
看的现象是slepp,点击dump,看线程找到自己工程的包,再看代码在做什么业务,导致目前线程在sleep状态中:
在这里插入图片描述
通过上面dump定位发现线程处于TIMED_WAITING (sleeping) ;

在这里插入图片描述
上面箭头数字表示目前代码行数,打开工程对比是否定位到代码行如:

在这里插入图片描述

通过dump的线程直接定位代码行数,剩下的就是分析业务代码逻辑进行代码调优。

五、线程阅读方法

选择一段线程:
在这里插入图片描述

查看方法是: 线程调用逻辑是从下往上看

在提出第一行进行分析:

"http-nio-8080-exec-4" #209 daemon prio=5 os_prio=31 tid=0x00007fdd7927f000 nid=0x7203 waiting on condition [0x000070000f277000]
  • 线程名称:“http-nio-8080-exec-4”
  • 线程优先级:prio=5
  • 线程对应的本地线程id号:nid=0x7203
  • 线程的状态:waiting
  • 线程占用内存地址 [0x000070000f277000]

打开idea 生成 Sequence Diagram 生成如下图:
在这里插入图片描述

通过这个图应该就明白他们调用关系,想起左老师一句话 “一图胜千句”。

六、总计

通过简单一个案例让大家快速通过 jvisualvm 工具定位到代码,在做性能测试过程中掌握几个常用工具能快速解决问题也是不错。

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

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

相关文章

Flink CDC MySQL数据同步到Doris表同步配置生成工具类

工具类 生成的配置 要同步表为&#xff1a; customer_user.tb_business_user_info express.route_push_service 请提前自行到doris中建好目标数据库&#xff0c;如果没有会报错 同步的配置文件如下&#xff1a;&#xff08;将配置内容保存为xxx.yaml文件到flink cdc提交任务&…

昇腾 Ascend 概念澄清 Host、Device、AI core、AI CPU、DVPP、AIPP、AscendCL、AscendC

昇腾 Ascend 概念澄清 Host、Device、AI core、AI CPU、DVPP、AIPP、AscendCL、AscendC flyfish Ascend C开发算子&#xff0c;偏低。 AscendCL开发应用&#xff0c;偏高。 AI core、AI CPU、DVPP都属于计算资源。 Ascend C开发的算子运行在AI Core上。 AIPP用于在AI Core上完…

TimeWheel算法介绍及在应用上的探索

作者&#xff1a;来自 vivo 互联网服务器团队- Li Fan 本文从追溯时间轮算法的出现&#xff0c;介绍了时间轮算法未出现前&#xff0c;基于队列的定时任务实现&#xff0c;以及基于队列的定时任务实现所存在的缺陷。接着我们介绍了时间轮算法的算法思想及其数据结构&#xff0c…

手撕数据结构与算法——拓扑排序

拓扑排序是图论中的一个重要概念&#xff0c;它在许多领域如任务调度、课程规划等都有广泛的应用。在这篇文章中&#xff0c;我们将探讨拓扑排序的基本概念、算法实现以及在C/C中的实现方法。 拓扑排序简介 拓扑排序是针对有向无环图&#xff08;DAG&#xff09;的一种排序算法…

二叉树(数据结构)

1.两种特殊的二叉树 1. 满二叉树 : 一棵二叉树&#xff0c;如果 每层的结点数都达到最大值&#xff0c;则这棵二叉树就是满二叉树 。也就是说&#xff0c; 如果一棵 二叉树的层数为 K &#xff0c;且结点总数是2^k-1 &#xff0c;则它就是满二叉树 。 2. 完全二叉树 : 完…

为你的LLM应用增加记忆能力

1. 记忆系统的重要性 我们都知道&#xff0c;大模型本身是无状态、无记忆的。默认情况下&#xff0c;我们向大模型发起的每次提问&#xff0c;在其内部都会被视为一次全新的调用。尽管诸如 ChatGPT 等聊天应用内置了部分记忆功能&#xff0c;可以记录用户最近几轮的聊天信息&a…

ChatTTS容器构建教程

一、模型介绍 ChatTTS 是专门为对话场景设计的文本转语音模型&#xff0c;例如 LLM 助手对话任务。它支持英文和中文两种语言。最大的模型使用了 10 万小时以上的中英文数据进行训练。在 HuggingFace 中开源的版本为 4 万小时训练且未 SFT 的版本。 ChatTTS WebUI如下&#x…

【单片机原理及应用】实验:LED循环控制

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 熟悉Proteus x8原理图与C51程序的联合仿真调试方法&#xff0c;掌握C51延时函数和循环控制的方法 二、实验内容 【参照图表】 &#xff08;1&#xff09;创建一…

晚宴扫码查询桌号

在现代社交活动中&#xff0c;晚宴的组织和管理越来越依赖于技术手段。为了提高晚宴的效率和参与者的体验&#xff0c;我们可以通过一个简单的扫码查询系统来实现快速查找桌号和座位号。以下是详细步骤&#xff1a; 1. 电脑端上传查询信息 访问云分组官网。 使用微信扫码登录…

AcrelEMS3.0企业微电网智慧能源平台的设计与应用-安科瑞 蒋静

1系统概述 1.1 概述 2020年9月&#xff0c;我国明确提出2030年“碳达峰”与2060年“碳中和”目标。2022年6月&#xff0c;科技部、国家发展改革委、工业和信息化部、生态环境部、住房城乡建设部、交通运输部、中科院、工程院、国家能源局共同研究制定了《科技支撑碳达峰碳中和…

netty编程之实现断点续传(分片发送)功能

写在前面 在我们使用各种网盘的时候&#xff0c;可以随时的暂停上传&#xff0c;然后继续上传&#xff0c;这其实就是断点续传的功能&#xff0c;本文就看下在netty中如何实现断点续传的功能。 1&#xff1a;核心点介绍 1.1&#xff1a;RandomAccessFile RandomAccessFile类…

汽车信息安全--MCU Flash读保护真的没有后门吗?

目录 1.修bug修出的灵感 2.串行编程接口协议 3.毛刺攻击 4.RH850 串行编程模式 5.小结 1.修bug修出的灵感 ECU量产后通过密码控制来防止通过Debug口读取Flash的程序和数据。 这是应该是共识了&#xff0c;但是这样做真的就万无一失了吗&#xff1f; 最近解决了个问题&…

Linux操作系统在虚拟机VM上的安装【CentOS版本】

目录 准备工作 "CPU虚拟化"的方法 VMware的安装 Linux镜像文件的下载 开始安装 声明 新建虚拟机 安装CentOS7.6 配置Linux(CentOS7.6)操作系统 配置分区【学习者可以直接点击自动配置分区&#xff0c;不过还是建议学习一下手动分区】 分区原则 添加分区 …

适配制造业的设备管理系统有哪些?本文给你答案!

本文将带大家盘点10款设备管理系统&#xff0c;供企业选型参考。 外包单位数量众多&#xff0c;但难以对他们进行统一协同管理&#xff1f;危险作业的作业申请、作业审批使用线下纸质版&#xff0c;不仅效率低还管控力不足&#xff1f;相关部门想监测、管理设备安全风险&#x…

AcWing898. 数字三角形

线性DP 董晓老师的讲解是从下标0开始算的&#xff0c;其实我们从1开始也可以&#xff0c;我感觉这里从1开始更好理解。是从下往上计算的。j负责列的计算&#xff0c;往上计算时逐步收窄横向的范围&#xff0c;i是纵向的从下往上算&#xff0c; 下面是内存布局 下面是逻辑上的…

【网络安全】打开这份“开学礼” 谨防骗子“冲业绩”

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

今年读过最绝的一本书!《自然语言处理原理、方法与应用》,几乎把自然语言处理讲透了【附PDF】

书籍内容介绍&#xff1a; 本书系统阐述自然语言处理基础知识&#xff0c;以及自然语言处理高级模型应用等高级知识。 全书共11章&#xff1a;第1&#xff5e;5章为自然语言处理的基础知识&#xff0c;第6&#xff5e;11章将自然语言处理知识应用于实战。书中主要内容包括预训…

99% 的人都不知道,哪种 Python 循环最快?

大家好&#xff0c;在Python编程中&#xff0c;循环是我们经常使用的工具&#xff0c;用来重复执行一些代码块。我们通常会在 for 循环、while 循环和列表推导式中选择一种来解决问题。但你是否曾想过&#xff1a;哪种循环效率最高&#xff1f; 今天&#xff0c;我们就来一次轻…

Vue -- 总结 02

Vue脚手架 安装Vue脚手架&#xff1a; 在cmd中安装(输入):npm install -g vue/cli 如果下载慢或下载不了&#xff0c;可以安装(cmd输入)淘宝镜像:npm config set registry https://registry.npmmirror.com 用命令创建Vue项目 在要创建的vue项目的文件夹里输入 cmd 回车 创…

CSS 2D3D转换与动画

CSS 2D&3D转换与动画 字体图标 字体图标展示的是图标&#xff0c;本质是字体 处理简单的&#xff0c;颜色单一的图片&#xff0c;使用字体图标 使用&#xff1a; 下载&#xff1a;https://www.iconfont.cn/ 引入字体图标样式表 对应标签上classz增加对应的类名&…