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

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.mzph.cn/news/660967.shtml

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

相关文章

MySQL数据库基础第三篇(约束)

文章目录 一、约束概述二、约束演示1.演示代码2.读出结果 三、外键约束1.创建外键2.删除更新外键 作为软件工程师和数据库管理员&#xff0c;我们经常需要操作和管理数据库。对于数据库中的信息完整性和准确性的确保&#xff0c;以及对数据质量的提升&#xff0c;数据库中的约束…

2023年09月CCF-GESP编程能力等级认证Python编程二级真题解析

一、单选题(共15题,共30分) 第1题 我国第一台大型通用电子计算机使用的逻辑部件是 ( )。 A:集成电路 B:大规模集成电路 C:晶体管 D:电子管 答案:D 第2题 下列流程图的输出结果是( )? A:5 12 B:12 5 C:5 5 D:12 12 答案:B 第3题 如果要找出整数 a …

【分布式技术专题】Guava RateLimiter 针对于限流器的入门到实战(含源码分析介绍)

Guava RateLimiter 针对于限流器的入门到实战 限流器的思路和算法漏桶算法令牌算法 RateLimiter限流器RateLimiter的作用create方法acquire方法tryAcquire方法 详细分析参数抛出异常参数抛出异常实践案例第1次获取10个令牌第2次获取1个令牌第3次获取10个令牌 资料参考 限流器的…

maven: 使用profiles进行多环境配置

文章目录 一、背景二、如何配置 一、背景 在项目开发的过程中会用到多个环境比如&#xff1a;本地环境&#xff08;开发自测&#xff09;、开发环境&#xff08;环境部署自测&#xff09;、生产环境等&#xff0c;由于不同的环境需要不同的配置信息&#xff0c;为了便于开发使…

opencv——将2张图片合并

效果演示: 带有绿幕的图片的狮子提取出来,放到另一种风景图片里! 1. 首先我们要先口出绿色绿幕,比如: 这里将绿色绿色绿幕先转为HSV,通过修改颜色的明暗度,抠出狮子的轮廓。 代码 : import cv2 as cv import numpy as np import matplotlib.pyplot as plt def showI…

spring-boot-admin的介绍和使用

概述 Spring Boot 有一个非常好用的监控和管理的源软件&#xff0c;这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供实时警报功能。 主要的功能点有&#xff1a; 显…

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

面试八股文(2)

文章目录 1.ArrayList和LinkedList区别2.HashMap和HashTable区别3.线程的创建方式4.Java中异常处理5.Java序列化中某些字段不想进行序列化&#xff1f;6.Java序列化7.静态方法和实例方法8.List、Set、Map三者区别9.ArrayList和Vector区别10.HashMap和HashSet区别 1.ArrayList和…

还在用findViewById,不来了解下其它方式?

众所周知&#xff0c;都2225年了&#xff0c;如果你还在用Java敲安卓代码&#xff0c;findViewById已经是一种非常繁琐的操作&#xff0c;如果要去获取的id数量多&#xff0c;则对开发更加不友好。如果一个页面id过多&#xff0c;经常会有如下场景&#xff1a; TextView title…

ISOLAR-A/B问题总结

ISOLAR-A/B报错问题一&#xff1a; 1. Target ARObject: <ECUC-MODULE-CONFIGURATION-VALUES-REF> Unable to resolve reference /ETAS_Project/EcucModuleConfigurationValuess/E2E. - Line: 99. [Infos] <ECUC-MODULE-CONFIGURATION-VALUES-REF> : </ARPacka…

Pytest 与allure测试报告集成

通过Feature, story, step 记录测试的功能&#xff0c;场景及测试步骤 # login.pylogin_func函数 传入参数是name 和 password 当输入的name和password与数据库db_data中数据一致时&#xff0c;返回“XXX成功登录系统&#xff01;” 当输入的name存在于数据库db_data但密码不正…

Qt应用开发(安卓篇)——调用ioctl、socket等C函数

一、前言 在 Qt for Android 中没办法像在嵌入式linux中一样直接使用 ioctl 等底层函数&#xff0c;这是因为因为 Android 平台的安全性和权限限制。 在 Android 中&#xff0c;访问设备硬件和系统资源需要特定的权限&#xff0c;并且需要通过 Android 系统提供的 API 来进行。…

自定义SpringBoot启动图标

在SpringBoot项目的resources目录下创建banner.txt文件 在https://www.bootschool.net/网站上复制Ascll艺术字&#xff08;图&#xff09;粘贴到banner.txt中保存。 启动项目就会加载 可以修改颜色&#xff0c;和版本号 ${application.version} 输出版本 ${spring-boot.v…

HubSpot是如何通过社交媒体与用户建立互动?

HubSpot善于利用社交媒体平台&#xff0c;与用户建立深度互动&#xff0c;增强用户对品牌的参与感与黏性。以下是HubSpot在社交媒体上建立互动的关键策略&#xff1a; 1. 及时回应用户评论&#xff1a;建立积极互动氛围 HubSpot注重在社交媒体上及时回应用户的评论。无论是表…

用的到的linux-文件移动-Day2

前言&#xff1a; 在上一节&#xff0c;我们复习了cd大法和创建生成文件和文件夹的方法&#xff0c;介绍了一些“偷懒”&#xff08;高效&#xff09;的小技巧&#xff0c;本节&#xff0c;我们一起来探讨下&#xff0c;我们对文件移动操作时有哪些可以偷懒的小技巧~ 一、复制…

引领AI创意教育新浪潮,瑞云AIGC实训平台解决方案来了

过去的2023年&#xff0c;AI&#xff08;人工智能&#xff09;成为了年度科技圈关键词&#xff0c;各行各业都在AI化&#xff0c;据统计&#xff0c;AIGC市场规模预计到2030年将达到万亿级别&#xff0c;这不仅是市场的趋势&#xff0c;更是创新的机遇。 教育行业更是如此&…

【网络基础】网络协议传输层UDP和TCP

UDP 解包和分用 解包&#xff08;解析数据包&#xff09; 捕获数据包&#xff1a;首先&#xff0c;接收端的网络栈捕获UDP数据包。检查目的端口&#xff1a;接收端检查数据包头部的目的端口&#xff0c;以确定哪个应用程序应该接收该数据包。验证校验和&#xff1a;接收端可能…

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

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

CentOS部署Docker Registry镜像仓库并结合内网穿透实现远程访问

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception“

Title: 因子图、边缘化与消元算法的抽丝剥茧 —— Notes for “Factor Graphs for Robot Perception” 文章目录 I. 前言II. 因子图的基本概念1. 因子图的定义2. SLAM 中的因子图A. 因子图的图示B. 因子图的因式C. 因子图的二分图形式 III. 边缘化与消元运算的基本原理1. 边缘化…