Arthas实战(5)- 项目性能调优

1、接口耗时查询:trace命令

trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

1.1 准备测试应用

新建一个 SpringBoot 应用,写一耗时久的代码:

@GetMapping("/methodTrace")public String methodTrace() throws InterruptedException {log.info("methodTrace start...");Thread.sleep(1000);this.methodTrace1();this.methodTrace2();log.info("methodTrace end...");return "success";}private void methodTrace1() {log.info("methodTrace1 start...");}private void methodTrace2() throws InterruptedException {log.info("methodTrace2 start...");Thread.sleep(2000);this.methodTrace2_1();this.methodTrace2_2();}private void methodTrace2_1() {log.info("methodTrace2_1 start...");}private void methodTrace2_2() throws InterruptedException {log.info("methodTrace2_2 start...");this.methodTrace2_2_1();}private void methodTrace2_2_1() throws InterruptedException {log.info("methodTrace2_2_1 start...");Thread.sleep(3000);}

1.2 运行项目

在这里插入图片描述
耗时 7 秒多,下面我们通过 trace 命令排查耗时久的罪魁祸首。

1.3 启动 Arthas 并追踪调用链路

  1. java -jar arthas-boot.jar

  2. 追踪调用链路:trace com.arthas.demo.controller.JvmThreadController methodTrace
    在这里插入图片描述
    命令执行概览:Affect(class count: 1, method count: 1) 表示有1个类中的1个方法受到了追踪影响。这次操作耗时133毫秒,并分配了监听器ID为1。

  3. 请求/methodTrace方法并观察调用详情
    在这里插入图片描述
    方法调用链:

    • methodTrace()调用:整体耗时约为6029毫秒
      • 子调用:
        • [0.07% 4.159334ms] org.slf4j.Logger:info() #99:首次日志输出调用,占总耗时的0.07%。
        • [0.04% 2.476375ms] com.arthas.demo.controller.JvmThreadController:methodTrace1() #102:methodTrace1方法调用,耗时较短。
        • [83.16% 5014.176042ms] com.arthas.demo.controller.JvmThreadController:methodTrace2() #103:methodTrace2方法调用,占据总耗时的83.16%。
        • [0.02% 1.465ms] org.slf4j.Logger:info() #105:在方法链的末尾新增了一个日志输出调用,占总耗时的0.02%。

    结论:

    • methodTrace()方法整体耗时约为6029毫秒,methodTrace()整体耗时减去下面子调用的耗时,得到的就是methodTrace()方法本身的耗时,约 1000ms,我们的代码 sleep 了1000ms,所以耗时基本准确。
    • com.arthas.demo.controller.JvmThreadController:methodTrace2()方法占据总耗时的83.16%, 所以下一步要继续最终methodTrace2()方法。
  4. ctrl+c退出当前追踪,并重新追踪methodTrace2()方法:trace com.arthas.demo.controller.JvmThreadController methodTrace2
    在这里插入图片描述

  5. 请求/methodTrace方法并观察调用详情
    在这里插入图片描述
    方法调用链的分析和第 3 步一样,就不多阐述了,可以看到上图红色字体, com.arthas.demo.controller.JvmThreadController:methodTrace2_2()耗时占 59.98% ,所以继续追踪trace com.arthas.demo.controller.JvmThreadController methodTrace2_2
    在这里插入图片描述
    继续追踪trace com.arthas.demo.controller.JvmThreadController methodTrace2_2_1
    在这里插入图片描述
    到这里,整个methodTrace方法的调用链路就算走完了,我们可以清楚的追踪到每个方法以及子方法的耗时和调用链路,然后去分析整个接口的性能,最终去调优。

  6. 再回顾一下整个追踪流程:
    在这里插入图片描述
    trace 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路,所以我们需要逐步分析,然后一级一级跟踪。

2、 函数执行数据观测:watch 命令

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

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

相关文章

能否免费使用Adobe XD?

Adobe XD不是免费的。Adobe 目前XD采用订阅模式,提供订阅模式 7 每天试用期结束后需要付费购买,具体价格根据不同的订阅计划确定,包括每月购买,包括 9.99 美元或每月 99.99 美元,或者选择购买Adobe CreativeCloud整体订…

内核错误定位

内核打印出如下: 在代码目录输入: ./prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb kernel/vmlinux 进入gdb 命令模式 输入 l *(rk628_csi_probe0xf0) 能定位到出现问题地方。 最后就…

android iconfont带图标的图文并茂的一种实现

android实现图文并茂方法很多。 这里针对,仅本地图标,需要对齐,任意位置,兼容换行导致后面空白的问题做的一种方案。 www.iconfont.cn,注册; 上传svg的icon; 下载项目得到iconfont.ttf&#xf…

AI绘画Stable Diffusion【图生图教程】:图片高清修复的三种方案详解,你一定能用上!(附资料)

大家好,我是画画的小强 今天给大家分享一下用AI绘画Stable Diffusion 进行 高清修复(Hi-Res Fix),这是用于提升图像分辨率和细节的技术。在生成图像时,初始的低分辨率图像会通过放大算法和细节增强技术被转换为高分辨…

以某头部基金实践为例,验证深信服超融合对TA系统承载能力

TA(Transfer Agent)开放式基金登记过户系统是交易管理系统的重要组成部分,是登记注册机构向投资者提供账户管理、份额登记、交易清算、红利发放、持有人名册保管的综合服务系统。 作为开放式基金运作的核心系统之一,承担着投资者…

计算机视觉——opencv快速入门(二) 图像的基本操作

前言 上一篇文章中我们介绍了如何配置opencv,而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。 图像的读取,显示与存储 读取图像文件 在opencv中我们利用imread函数来读取图像文件,函数语法如下: imagecv2.imre…

信息安全新挑战:云计算环境下的等保测评实践探索

随着信息技术的飞速发展,云计算技术因其灵活性、可伸缩性和经济性,正逐渐成为企业和组织构建信息系统的首选。然而,云计算环境的复杂性和动态性也为信息安全带来了新的挑战,尤其是在信息安全等级保护(以下简称“等保”…

FairMOT安装

安装环境:CUDA:11.3 GCC version 9.5.0 1、下载FairMOT FairMOT下载地址:https://github.com/ifzhang/FairMOT 2、下载DCNv2 DCNv2下载地址:https://github.com/lbin/DCNv2/tree/pytorch_1.9 这里下载1.9对应的版本&#xff0…

NLP+LLM从入门到精通系列

NLPLLM从入门到精通系列 前言:笔者从事于NLPLLM的对话智能机器人的相关行业,现在的大模型的技术日新月异,传统的NLP业务显然是要被淘汰的,那么这也是我着笔写这一系列文章的初衷。本系列将由浅到深,结合实际代码案例&…

深度调峰汽轮机相关技术资料 厂家培训用

网盘 https://pan.baidu.com/s/16KfuoVko5xCUk3bDOfTlvQ?pwdezjb 亚临界循环流化床机组深度调峰下的输出功率预测方法.pdf 基于时间序列分析的燃煤电厂深度调峰预测方法及装置】.pdf 基于汽轮机低压缸排汽压力调节的深度调峰方法.pdf 基于深度调峰工况下阀门阀杆的振动预测方…

01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型

01–SpringAI接入大模型,chatgpt,Java接入人工智能大模型 文章目录 01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型一、准备工作?①:环境准备 二、创建一个springAI项目①:创建一个根项目②:创建一个SpringAI模块01.解决…

国际水务交流 | 一带一路沿线水环境考察暨中马水务合作论坛

从具体区域来看,“一带一路"沿线国家环境问题复杂而多样,各国生态环境特征差异明显 东南亚尤其是东盟地区受热带季风影响,降水较多,洪水高发,也是世界生物最为多样最为丰富的地区之一,这一区域面临森…

项目实战--Spring Boot与PageHelper的集成及线程污染解决

一、PageHelper使用背景 公司要做个简单管理系统,要我搭建Spring BootMyBatisPageHelperRedis的项目框架然后交i给实习生来开发。这个其实很简单,但是遇到搭建和使用过程中PageHelper有好多小坑,就记录一下,避免再踩。 版本选择&…

std::__cxx11::basic_string 和std::basic_string的不同

问题描述: 源文件中定义的函数是 : void setAccessKeyId(std::string) 但是使用centos中 g4.8.5 编译能正常编译过,debian系统中使用 centos 10.2版本编译不过 提示找不到定义:setAccessKeyId(std::__cx…

c++:#include 某文件.h底层如何寻找其.cpp实现

在C中,当你编写了一个头文件(如MyLibrary.h)和对应的实现文件(如MyLibrary.cpp)时,其他源文件(如main.cpp)只需要包含头文件(#include "MyLibrary.h"&#xff…

C语言_操作符

目录 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用,函数调用,结构成员 表达式求值 隐式类型转换 算术转换 操作符的属性 练习题 代码仓库 算术操作符 加()&#x…

部署过docker后,防火墙firewall与iptables的基本指令

一、iptables【无需stop docker服务】 如果服务器中部署了docker,优先选用iptables 1. 记录关闭docker中运行的mongoDB的27017端口: 由于docker与iptables存在配置规则,因此要修改docker相关端口的可访问性时需要使用下面的语句&#xff1a…

自定义通信协议实例

自定义通信协议是指通信双方为了实现特定功能或满足特定需求,在通信过程中自行约定的一种通信规则。这种协议通常包括数据的格式、传输方式、校验方法等内容,以确保通信双方能够正确地理解和交换信息。以下是关于自定义通信协议的一些详细解释和示例&…

git上传时出现了main master的问题解决

git 上传时 出现了main master 这个问题通常出现在Git版本控制系统中,当你尝试上传代码到远程仓库时,可能会看到一个提示,关于"main"和"master"的。 解释: Git 2020年发布了新的默认分支名称"main&qu…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力,不仅能够实现远程操控开关电源,部分高端型号更是集成了电量统计与自动化操作功能,为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价,因版本差异可能有所不同。…