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.rhkb.cn/news/247188.html

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

相关文章

python算法与数据结构---滑动窗口双指针

学习目标 了解滑动窗口的基本原理&#xff1b;学会用使用python语言解答滑动窗口经典题目&#xff1b;了解双指针的基本原理&#xff1b;学会使用python语言解答双指针经典题目&#xff1b; 滑动窗口 209. 长度最小的子数组 https://leetcode.cn/problems/minimum-size-sub…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

深入理解TCP网络协议(1)

目录 1.TCP协议的段格式 2.TCP原理 2.1确认应答 2.2超时重传 3.三次握手(重点) 4.四次挥手 1.TCP协议的段格式 我们先来观察一下TCP协议的段格式图解: 源/目的端口号:标识数据从哪个进程来,到哪个进程去 32位序号/32位确认号:TCP会话的每一端都包含一个32位&#xff08…

linux 的nobody是什么用户? 对安全有没有影响?

目录 一、nobody是不是可疑用户&#xff1f; 二、Linux系统中的nobody用户&#xff1f; 三、有nobody用户存在&#xff0c;安全吗&#xff1f; 一、nobody是不是可疑用户&#xff1f; 在Linux系统中&#xff0c;nobody是一个特殊的用户账户&#xff0c;通常用于运行系统服务…

UE5在VisualStudio升级后产生C++无法编译的问题

往期的虚幻引擎项目在VS更新后&#xff0c;编译时会报错&#xff0c;这一般出现在VS升级之后&#xff0c;UE对于VC的编译器定位没有更新导致&#xff1b; 有出现如下问题&#xff1a; 问题1&#xff1a; Running I:/EPCI/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.ba…

C++设计模式介绍:优雅编程的艺术

物以类聚 人以群分 文章目录 简介为什么有设计模式&#xff1f; 设计模式七大原则单一职责原则&#xff08;Single Responsibility Principle - SRP&#xff09;开放封闭原则&#xff08;Open/Closed Principle - OCP&#xff09;里氏替换原则&#xff08;Liskov Substitution …

市场复盘总结 20240124

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 19/43 28.2% 二进三&#xff1a; 进级率低 47% 最常用的二种方法&#xff1a; 方…

【数据结构四】栈与Stack详解

目录 栈与Stack 1.实现一个自己的栈 2.Stack的基本使用 3.栈的一些oj题训练 4.栈&#xff0c;虚拟机栈&#xff0c;栈帧的区别 栈与Stack 栈 &#xff1a;一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作 。进行数据插入和删除操作的一端称为栈顶…

【音视频原理】音频编解码原理 ③ ( 音频 比特率 / 码率 | 音频 帧 / 帧长 | 音频 帧 采样排列方式 - 交错模式 和 非交错模式 )

文章目录 一、音频 比特率 / 码率1、音频 比特率2、音频 比特率 案例3、音频 码率4、音频 码率相关因素5、常见的 音频 码率6、视频码率 - 仅做参考 二、音频 帧 / 帧长1、音频帧2、音频 帧长度 三、音频 帧 采样排列方式 - 交错模式 和 非交错模式1、交错模式2、非交错模式 一…

微信小程序-04

rpx&#xff08;responsive pixel&#xff09;是微信小程序独有的&#xff0c;用来解决屏适配的尺寸单位。 import 后跟需要导入的外联样式表的相对路径&#xff0c;用 ; 表示语句结束。 定义在 app.wxss 中的样式为全局样式&#xff0c;作用于每一个页面。 在页面的 .wxss 文…

薅运营商羊毛?封杀!

最近边小缘在蓝点网上看到一则消息 “浙江联通也开始严格排查PCDN和PT等大流量行为 被检测到可能会封停宽带”。 此前中国联通已经在四川和上海等多个省市严查家庭宽带 (部分企业宽带也被查) 使用 PCDN 或 PT&#xff0c;当用户的宽带账户存在大量上传数据的情况&#xff0c;中…

【USTC】verilog 习题练习 46-50

46 上升沿检测 题目描述 在实际应用中&#xff0c;我们经常需要对某个信号的边沿进行检测&#xff0c;并以此作为后续动作的触发信号&#xff08;例如电脑键盘的某个按键被按下或者被松开&#xff0c;在电路中则对应的是电平的变化&#xff09;。 设计一个电路&#xff0c;包…

幻兽帕鲁服务器价格,这个价格不够电费的

幻兽帕鲁服务器价格多少钱&#xff1f;4核16G服务器Palworld官方推荐配置&#xff0c;阿里云4核16G服务器32元1个月、96元3个月&#xff0c;腾讯云换手帕服务器服务器4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G3…

QT之 QDebug 调试(一)

在QT中&#xff0c;进行调试&#xff0c;则需要在头文件地方加上 #include <QDebug> 加上之后&#xff0c;在编译之后则其输出的信息则在应用程序输出那里显示信息。 其QDebug 信息调试则如&#xff1a; qDebug() << " 需要插入的信息 "…

2000-2022年上市公司全要素生产率测算固定效应FE法(含原始数据+测算代码do文档+计算结果)

2000-2022年上市公司全要素生产率测算固定效应FE法&#xff08;含原始数据测算代码do文档计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、统计截止日期、固定资产净额、year、股票简称、报表类型…

C# RichTextBox常用属性、方法学习1

1 字体 Font font1 new Font("宋体", 18); richTextBox1.Font font1; Font font2 new Font("宋体", 10, FontStyle.Underline); richTextBox1.SelectionFont font2; 定义字体&#xff0c;可以带2个参数&#…

服务端开发小记03——vsftpd

这里写目录标题 vsftpd简介vsftpd在Linux下的安装vsftpd验证vsftpd常用命令 vsftpd简介 vsftpd是“very secure FTP daemon”的缩写&#xff0c;是一个用于Linux环境下的免费开源的ftp服务器软件。vsftpd在Linux发行版中最受推崇&#xff0c;小巧轻快&#xff0c;安全易用&…

(黑马出品_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_01&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术栈导学 1.认识微服务1.1.学习目标1.2.单体架构1.3.分布式架构1.4.微服务1.5.SpringCloud1.6.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示…

深度强化学习(王树森)笔记07

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

内部类 --java学习笔记

内部类 是类中的五大成分之一&#xff08;成员变量、方法、构造器、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff0c;那么这个类就是内部类当一个类的内部包含了一个整体的事务&#xff0c;且这个事务没必要单独设计时&#xff0c;就可以把…