使用阿里巴巴开源神器Arthas进行性能分析

news2024/11/23 9:30:07

目录

前言:

  Arthas介绍

  启动

  分析命令

  Profiler工具


前言:

Arthas是一款由阿里巴巴开源的Java诊断工具,它可以在生产环境中帮助开发人员快速地定位问题,并进行高效的性能分析。通过在命令行中输入简单的命令,开发人员可以进行多种性能分析操作,包括方法耗时分析、线程状态分析、GC分析、实时监控等。

  Arthas介绍

  Arthas是Alibaba开源的Java诊断工具,采用命令行交互模式,提供了丰富的功能,是Java 相关问题排查和性能优化的强大工具。为了明显区分 CPU 耗时和内存占用,分别写了 string 操作的三种方式:String,StringBuffer,StringBuilder。下面将根据这个Demo来对Arthas 进行介绍。

  启动

  下载解压后直接用脚本方式“./as.sh”来启动,或者用Java命令“$ java -jar arthas-boot.jar”启动。启动后Arthas会自动列出现有的 Java 进程,输入进程代码进入对应的进程操作页。

  分析命令

  1. JVM其他相关的命令:查看JVM系统(jvm,sysprop)、环境(sysenv)、日志(logger)、配置及线程堆栈(thread)等信息。

  `dashboard`命令查看进程的CPU、Memory和Runtime等实时数据。

  2. Class\ClassLoader 相关命令支持查看已加载的类(sc)和方法(sm)相关信息,编译(mc)及反编译(jad)源码,查看 classloader 相关内容。

  `sc`命令展示`StringMonitor`类相关的信息。

  `sm`命令展示StringMonitor类下相关的方法及stringAppend方法详情。

  3. 还有一部分程序运行时监测统计分析相关命令(monitor、watch、trace),通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测。

  `watch` 用来观察方法的执行数据包括入参、返回值、抛出异常等其中可用参数params、target、returnObj等可组合表达式进行查看。这里观察了StringMonitor类的stringAppend方法 5 次采样对应的当前对象属性。

  `trace` 用来查看方法内部调用路径,并输出方法路径上的每个节点上耗时,其中也可附加其他组合参数,比如在方法名后空格后附加 #cost > 10过滤耗时。

  这里展示了StringMonitor类的stringAppend方法的方法调用路径及当前节点当前步骤的耗时等信息。

  Profiler工具

  Async-Profiler(https://github.com/jvm-profiling-tools/async-profiler#download)是基于HotSpot进行堆栈和内存分配信息的收集和跟踪,可以和OpenJDK、Oracle JDK和其他基于HotSpot JVM的Java应用在运行时协同工作,是一个对系统性能影响很少的Java采样分析器,该工具提供开箱即用的Flame图形支持(也就是常听说的火焰图)。

  使用 `profiler start` 和 `profiler stop` 命令分别开始和停止采集数据。

  采集到的CPU使用图如下,stringAppend函数在代码中已1/1000的频率执行仍占10.34%的CPU运行时间,而stringBuffer因为保证线程安全的原因耗时也比stringBuilder要多不少,这里限于采样量级较少,数据可能会有些许误差。

  `profiler start` 命令后面可以加 `--event` 参数指定要采集数据类型,目前支持 cpu(默认)、alloc、lock、wall和itimer等。使用命令 `profiler start --event alloc` 采集内存申请数据如下,stringAppend方法内存申请操作同样占绝大多数,而stringBuffer与stringBuilder在内存申请上并无差异。

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步! 

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=8hUKwUHn9HhVpR8qWhqfT2u-kU-3hpsF&authKey=47BBG1nwHVOka38EQeJevQFCP%2BeVEf%2Bpd8QqotS1%2FqyJdrGAo1A6%2BfS9ef3wJij2&noverify=0&group_code=574737577

 

 

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

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

相关文章

Win10开机后自动显示右键菜单怎么办?

Win10开机后自动显示右键菜单怎么办?用户打开Win10电脑后发现电脑自动显示右键菜单,如果是使用联想电脑的用户,需要打开联想管家,关掉联想锁屏即可,若是系统不兼容导致的,这时候用户就需要恢复Win10系统来解…

前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(上)

前言 前端性能优化 又是个听起来很高大上的词,确实是的,因为它需要 高在性能,大在范围 ,所幸很多大佬都已经输出了很多高质量的内容供大家参考,作者最近也在学习和了解这方面的内容,对如下文中的一些理解若…

死磕测试 10 余年,呕心整理出了核心知识点已经做成PDF,无私奉献

前言: 想在面试、工作中脱颖而出?想在最短的时间内快速掌握 软件测试 的核心基础知识点?想要成为一位优秀的测试工程师?本篇文章能助你一臂之力! 目前正值招聘求职旺季,很多同学对一些新技术名词都能侃侃…

智能文本生成:进展与挑战

智能文本生成:进展与挑战 万小军 北京大学王选计算机研究所 摘要:智能文本生成是人工智能与自然语言处理领域的前沿研究方向,也是AI生成内容(AIGC)的关键技术支撑,近些年受到学术界和产业界的高度关注&…

[笔记]pg常用命令

数据库版本 :9.6.6 注意 :PostgreSQL中的不同类型的权限有SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE 和 USAGE。 1. 登录PG数据库 以管理员身份 postgres 登陆,然后通过 #psql -U postg…

【TA100 】3.3 曲面细分与几何着色器---大规模草渲染

一、两者的应用列举 1-1.曲面细分着色器的应用 ①海浪、雪地等 2著名的应用:和置换贴图(DIsplacement mapping,也叫位移贴图)结合使用 ● 使用普通法线的模型,在边缘部分的凹凸感会不理想 ● 如果使用置换贴图&#…

HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 二)

自定义布局 当Java UI框架提供的布局无法满足需求时,可以创建自定义布局,根据需求自定义布局规则 常用接口 Component类相关接口 接口名称 作用 setEstimateSizeListener 设置测量组件的侦听器 setEstimatedSize 设置测量的宽度和高度 onEstima…

极速了解GPT生态

第一部分: 1、chatGPT:一个大语言模型,可以通过API去访问,下面很多是根据API去访问,然后来进行集成。 2、Vector store,你也可以叫是Vector search,主要目就是存储各种向量,然后去计算向量的各…

【Linux】基础IO——文件描述符:缓冲区的理解

上个月学校考试,进行课程复习,一直没有更新博客,现考试结束,继续保持更新,欢迎大家关注! 目录 1 模仿C库自主封装简单的文件接口2 对缓冲区的理解2.1 数据刷新到磁盘的过程分析2.2 如何强制刷新内核 1 模仿…

00后是真的卷不过,工作没两年,跳槽到我们公司起薪17K都快接近我了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

go+vue自建运维管理平台

文章目录 鲁班运维平台容器管理集群管理namespace管理节点管理工作负载存储管理网络管理配置管理事件中心 kuboard 鲁班运维平台 这个平台和spug很像,感觉就像是spug运维平台的容器版本。 但是如果是容器平台则选择的余地很大,优秀的如kubersphere、kub…

NeRF+SLAM论文阅读笔记

CVPR 2023 Co-SLAM: Joint Coordinate and Sparse Parametric Encodings for Neural Real-Time SLAM input: RGB-D contribution: 1.场景表示:多分辨率哈希网格(加速&保留高频特征) 2.编码方式:one-b…

STM32 实现简单定时任务调度器,动态创建任务,两种思路实现流水灯

代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话&…

排它锁和共享锁.md

介绍 排它锁(Exclusive),又称为X 锁,写锁。 共享锁(Shared),又称为S 锁,读锁。 X和S锁之间有以下的关系: SS可以兼容的,XS、SX、XX之间是互斥的 显式加锁…

Django-带参数的路由编写(一)【不用正则表达式匹配的简单带参数路由】

在某urls.py文件有如下的路由配置语句&#xff1a; urlpatterns [path(app2/show/<int:id>/,views.show_id), ]语句&#xff1a; path(app2/show/<int:id>/,views.show_id),中的<int:id>就是带参数的URL中的参数部分&#xff0c;其语法格式如下&#xff1a…

PPT中如何做出透视圆的效果?

看两个例子 一个是上部这种垂直的圆环。 一个是下部这种圆。 它们都据有一定的透视感,上部用于表示流量,下部用于表示出“某一领域”的意镜。 向下延展的圆环透视效果 先说这个扁平的圆的例子,它有4个圆,画的技巧如下: 就是4个圆环;把4个圆环互相叠加;把上和下在“中…

2023年网络安全保姆级入门学习路线,建议收藏!

作为一个工作多年的网络安全渗透工程师&#xff0c;我知道对于零基础小白来说&#xff0c;网络安全可能是一个非常陌生而且有些恐怖的领域。但是不用担心&#xff0c;只要你愿意花费时间和精力去学习&#xff0c;你也能成为一个优秀的网络安全专家。 网络安全学习路线 首先&a…

顺序队列和链队列

队列也是一种线性结构&#xff0c;不同于栈的是队列为先进先出的数据结构&#xff0c;遵循一边入队一边出队。 顺序队列的底层使用的是数组&#xff0c;因此需预先申请一块足够大的内存空间初始化顺序队列。除此之外&#xff0c;为了满足顺序队列中数据从队尾进&#xff0c;队头…

接口测试和功能测试的区别

目录 前言&#xff1a; 一、测试目的不同 二、测试内容不同 三、测试重点不同 四、总结 前言&#xff1a; 接口测试和功能测试是软件测试中的两种不同类型。接口测试侧重于测试不同模块之间的接口&#xff0c;而功能测试则注重测试完整的业务功能。 一、测试目的不同 接…

Vue中如何进行文件打印与PDF导出

Vue中如何进行文件打印与PDF导出 在Vue应用中&#xff0c;有时候需要将页面内容打印出来或者导出为PDF格式&#xff0c;以满足用户的需求。本文将介绍如何在Vue应用中实现文件打印和PDF导出的功能。 文件打印 文件打印是指将页面内容输出到打印机上&#xff0c;将其打印成纸质…