JVM性能分析工具——Arthas及火焰图的使用

news2024/11/14 13:54:45

Arthas的使用

  • Arthas常用命令
  • Arthas的安装
  • Linux压测工具Apache Bench安装
  • 火焰图的使用
  • 火焰图如何分析
    • 火焰图的互动

Arthas常用命令

  • help :查看所有命令
  • dashboard :仪表板,查看线程的CPU信息等
  • heapdump :不同类对象占用内存比重,产生堆转储文件
  • thread :线程信息
  • thread -h :查看thread相关命令
  • thread -b :查找死锁
  • watch 类名 方法名 returnObj :查看方法的返回值
  • jvm :查看java进程相关参数信息,用哪种垃圾收集器等
  • jad :反编译,可以查看你所依赖的jar包,定位问题(版本是否引错)
  • redefine :热替换(线上的项目不用停,本地改了之后redefine就能变成想要的结果)
  • trace 类名 方法名 :(单机的链路追踪)
  • 其他命令参考:命令列表

Arthas的安装

  • 我使用的是Linux系统下的快速安装
  • 执行命令,curl -L https://arthas.aliyun.com/install.sh | sh 安装,默认会安装到当前目录下
  • 执行./as.sh 进入交互界面,./就是当前目录,如果执行此命令时出现:Error: no available java process to attach. 就是没有运行的java程序,我们只需要运行一个java程序即可

Linux压测工具Apache Bench安装

  • Linux压测工具Apache Bench的使用
  • 安装apache:yum install httpd ,中途输入y即可
  • 启动apache:systemctl start httpd.service
  • 安装http服务:yum install httpd
  • 查看http服务版本:httpd -version
  • 启动http服务:service httpd start
  • 查看http服务状态:service httpd status

火焰图的使用

  • 步骤一:在系统中启动一个Java项目,并且是一个不会马上停止的项目,我是将本地的SpringBoot项目打成jar包,通过java -jar运行起来的,注意要打包的项目中pom.yml要加上打包插件
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

点击install或package 都可以,打包后的jar包会在target目录下,我们将这个jar包放到虚拟机中,切换到jar包放置的目录,执行java -jar 包名即可.
在这里插入图片描述
执行后的效果如图
在这里插入图片描述

  • 步骤二:不能关闭步骤一的窗口,新打开一个窗口,在arthas的安装目录下执行./as.sh进入交互界面,选择刚启动的java进行,输入进行对应的数字,让arthas进行监控后开启火焰图 profiler start,等压测执行一段时间后(步骤三)关闭火焰图 profiler stop
    在这里插入图片描述
    stop后会生成一个火焰图的页面
    在这里插入图片描述
    在这里插入图片描述
    打开这个html就是火焰图
    在这里插入图片描述
  • 步骤三:新开一个窗口,在apache bench的安装目录下进行压测模拟,执行ab -n 20000 -c 200 http://localhost:8080/

ab 就是apache bench
-n 请求的总次数
-c 并发用户数
http://localhost:8080/就是访问的这个程序地址

火焰图如何分析

参考:https://blog.csdn.net/qq_43097201/article/details/125683217

  • 颜色
    绿色:Java代码
    黄色:JVM,C++代码
    红色:用户态,C代码
    橙色:内核态,C代码
  • x-y轴
    x轴代表的不是时间,而是采样总量占用CPU的时间
    y轴代表方法的调用栈深度,倘若方法调用得越多,火焰越高,每一层代表一个方法,顶部的栈就是当前正在执行的方法
  • 栈宽含义(CPU时间)
    宽度可以理解为CPU采样率的占比,越宽代表当前栈在采样数中占比高,其可能为三种含义
    代表该函数在程序中运行所占用的CPU时间。
    代表该函数被其他函数调用的次数。
    代表该函数在程序中的复杂度,也即调用该函数的层数。
  • 平顶现象(一定要格外注意)
    平顶现象是由于当前程序的采样数在总采样数中占用过高导致的,出现这种现象需要特意关注一下程序具体的调用栈,采样比例占用率过高,即代表方法在CPU中的占用率过高

火焰图的互动

  • 鼠标悬浮:鼠标悬浮会显示所在层的方法名、采样次数、采样的占比
  • 双击:可以放大该方法所在层
  • Ctrl+F:搜索,匹配的方法高亮显示
  • 【注意】:如果你的项目调用了其他框架,则不会显示你的方法,所以火焰图其实分析不出个啥

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

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

相关文章

windows pm2 执行 npm脚本或执行yarn脚本遇到的问题及解决方案

环境&#xff1a; 在windows上启动终端来运行一个项目&#xff1b;通过指令npm run start来启动&#xff0c;但是将终端一关&#xff0c;就无法访问了&#xff0c;所以想到用pm2来管理 1. 全局安装pm2 npm i pm2 -g2. 在项目根目录执行指令(大部分兄弟的错误使用方法) pm2 st…

微服务—Docker

目录 初识Docker Docker与虚拟机的区别 镜像与容器 Docker架构 常见Docker命令 镜像命令 容器命令 数据卷挂载 直接挂载 初识Docker 在项目部署的过程中&#xff0c;如果出现大型项目组件较多&#xff0c;运行环境也较为复杂的情况&#xff0c;部署时会碰到一些问题&…

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?

利率主导的市场&#xff0c;将在2024年延续。目前&#xff0c;固收市场对于降息的定价&#xff0c;正通过利率传导至不同资产中。尽管市场迫切利用通胀去佐证降息&#xff0c;但各国央行仍囿于通胀目标的政策桎梏。政策和市场预期的博弈将继续牵动市场脉搏&#xff0c;引发价格…

酷开科技依托酷开系统新剧热播,引领潮流风向

随着科技的不断发展&#xff0c;智能电视已经成为了家庭娱乐的主流&#xff0c;是消费者居家休闲放松的好帮手。其中&#xff0c;作为国内智能电视操作系统领军者的酷开系统&#xff0c;一直致力于为消费者提供丰富的内容和贴心的体验。近日&#xff0c;酷开系统新剧热播&#…

数组常见算法题-评委打分

签名&#xff1a;但行好事&#xff0c;莫问前程。 文章目录 前言一、计算数组的最大值、最小值、总和、均值二、评委打分总结 前言 学习记录一下数组常见的算法题。 一、计算数组的最大值、最小值、总和、均值 需求&#xff1a;定义一个int型的数组&#xff0c;分别赋予随机两…

Tensorflow2.0笔记 - where,scatter_nd, meshgrid相关操作

本笔记记录tf.where进行元素位置查找&#xff0c;scatter_nd用于指派元素到tensor的特定位置&#xff0c;meshgrid用作绘图的相关操作。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plttf.__version__#where操作查找元素位置 #输入的tensor是Tr…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

springboot 文件差异化对比以及可视化展示

maven依赖 <!-- 文件内容对比--><dependency><groupId>io.github.java-diff-utils</groupId><artifactId>java-diff-utils</artifactId><version>4.11</version></dependency>创建Diff 工具类 package com.system.ut…

大路灯和台灯哪个更适合学生?五款适合学生的大路灯分享

根据国家卫健委在上个月公布的数据&#xff0c;我国儿童青少年总体近视率为52.7%&#xff0c;其中&#xff0c;小学生为35.6%&#xff0c;初中生为71.1%&#xff0c;高中生为80.5%。随着这个数据公布以来&#xff0c;许多家长开始紧张自家孩子的近视问题&#xff0c;不少家长为…

Vue学习Element-ui

声明&#xff1a;本文来源于黑马程序员PDF讲义 Ajax 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是 互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2…

【FAS Survey】《Deep learning for face anti-spoofing: A Survey》

PAMI-2022 最新成果&#xff1a;https://github.com/ZitongYu/DeepFAS 文章目录 1 Introduction & Background1.1 Face Spoofing Attacks1.2 Datasets for Face Anti-Spoofing1.3 Evaluation Metrics1.4 Evaluation Protocols 2 Deep FAS with Commercial RGB Camera2.1 H…

幻兽帕鲁服务器游戏怎么升级版本?

幻兽帕鲁服务器游戏怎么升级版本&#xff1f;自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新…

pinctrl/gpio子系统(1)-pinctrl子系统介绍及驱动源码分析

1.简介 在如今的驱动开发工作中&#xff0c;实际上已经很少去对着寄存器手册进行驱动开发了&#xff0c;一般板子拿到手&#xff0c;已经有原厂的驱动开发工程师&#xff0c;在gpio子系统、pinctrl子系统中将自家芯片的引脚适配好了。 我们直接基于设备树已配置好的寄存器值&a…

jsonpath相关---JSONPath - 用于 JSON 的 XPath

一.简介 XML 的一个经常强调的优点是提供了大量工具来分析、转换和有选择地从 XML 文档中提取数据。XPath 就是这些强大的工具之一。 现在是时候想知道&#xff0c;是否需要像 XPath4JSON 这样的东西&#xff0c;以及它可以解决哪些问题。 无需特殊脚本&#xff0c;即可以交…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者&#xff1a;张铭辉、泮圣伟 前言 随着春节大促即将到来&#xff0c;为了确保线上业务高效稳定地运行&#xff0c;电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求&#xff0c;来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

vue-cli初始化项目很慢?

第一种情况 大部分是由于npm的镜像源不是淘宝的 cmd输入npm config get registry查看是不是淘宝的&#xff0c;是的话看第二种情况试试不是的话输入npm config set registry https://registry.npm.taobao.org 第二种情况 vue-cli配置文件不是使用淘宝镜像源的 找到文件.vue…

sklearn 计算 tfidf 得到每个词分数

from sklearn.feature_extraction.text import TfidfVectorizer# 语料库 可以换为其它同样形式的单词 corpus [list(range(-5, 5)),list(range(-6,4)),list(range(12)),list(range(13))]# corpus [ # [Two, wrongs, don\t, make, a, right, .], # [The, pen, is, might…