arthas 火焰图神器-async-profiler

2024-08-21 00:08

本文主要是介绍arthas 火焰图神器-async-profiler,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、async-profiler

This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. It features HotSpot-specific APIs to collect stack traces and to track memory allocations. The profiler works with OpenJDK, Oracle JDK and other Java runtimes based on the HotSpot JVM.(该项目是一个用于Java的低开销采样分析器,不会遇到安全点偏差问题。它具有特定于热点的api来收集堆栈跟踪和跟踪内存分配。探查器与OpenJDK、Oracle JDK和其他基于热点JVM的Java运行时一起工作。)
项目地址:https://github.com/jvm-profiling-tools/async-profiler

Async-profiler 可以跟踪以下类型的事件:

  • CPU cycles Cpu 周期
  • Hardware and Software performance counters like cache misses, branch misses, page faults, context switches etc. 硬件和软件性能计数器,如缓存缺失、分支缺失、页面错误、上下文切换等
  • Allocations in Java Heap Java 堆中的分配
  • Contented lock attempts, including both Java object monitors and ReentrantLocks 满足的锁尝试,包括 Java 对象监视器和 ReentrantLocks

注意: macOS 分析仅限于用户空间代码。

可以自己下载下来体验一下~ 这里需要知道的几点 async-profiler "基于当前时间段类对于数据进行收集"历史是咋样和当前数据收集没有关系。

profiler

看了下面的几种数据的收集,感觉cpu 收集应该是最好用的!在一个系统中性能优化分析耗死比较大,占用cpu比较大的资源非常有用。
ALLOCATION 内存分配可以让普罗米修斯这种监控工具、或者自己直接dump下来分析内存的占用。
Java method 方法的调用监控这个自己也可以的
Wall-clock 这个我不是很理解

CPU profiling

In this mode profiler collects stack trace samples that include Java methods, native calls, JVM code and kernel functions.(在这种模式下,profiler收集堆栈跟踪样本,包括Java方法、本机调用、JVM代码和内核函数。)

ALLOCATION profiling

Instead of detecting CPU-consuming code, the profiler can be configured to collect call sites where the largest amount of heap memory is allocated.(可以将探查器配置为收集分配最大堆内存的调用站点,而不是检测消耗CPU的代码。) 检查当前分配内存最多的地方。

Wall-clock profiling

-e wall option tells async-profiler to sample all threads equally every given period of time regardless of thread status: Running, Sleeping or Blocked. For instance, this can be helpful when profiling application start-up time. (Wall选项告诉async-profiler在给定的时间内对所有线程平均采样,而不管线程状态如何: 运行、休眠或阻塞。例如,在分析应用程序启动时间时,这可能会有所帮助。) Wall-clock profiler is most useful in per-thread mode: -t.

Java method profiling

-e ClassName.methodName option instruments the given Java method in order to record all invocations of this method with the stack traces.(ClassName.methodName选项使用给定的Java方法,以便使用堆栈跟踪记录此方法的所有调用。)

Usage

$ ./profiler.sh
Usage: ./profiler.sh [action] [options] <pid>
Actions:start             start profiling and return immediatelyresume            resume profiling without resetting collected datastop              stop profilingcheck             check if the specified profiling event is availablestatus            print profiling statuslist              list profiling events supported by the target JVMcollect           collect profile for the specified period of timeand then stop (default action)
Options:-e event          profiling event: cpu|alloc|lock|cache-misses etc.-d duration       run profiling for <duration> seconds-f filename       dump output to <filename>-i interval       sampling interval in nanoseconds-j jstackdepth    maximum Java stack depth-b bufsize        frame buffer size-t                profile different threads separately-s                simple class names instead of FQN-g                print method signatures-a                annotate Java method names-o fmt            output format: summary|traces|flat|collapsed|svg|tree|jfr-I include        output only stack traces containing the specified pattern-X exclude        exclude stack traces with the specified pattern-v, --version     display version string--title string    SVG title--width px        SVG width--height px       SVG frame height--minwidth px     skip frames smaller than px--reverse         generate stack-reversed FlameGraph / Call tree--all-kernel      only include kernel-mode events--all-user        only include user-mode events--cstack mode     how to traverse C stack: fp|lbr|no<pid> is a numeric process ID of the target JVMor 'jps' keyword to find running JVM automaticallyExample: ./profiler.sh -d 30 -f profile.svg 3456./profiler.sh start -i 999000 jps./profiler.sh stop -o summary,flat jps
# 内存分配
./profiler.sh -d 10 -e alloc -f output-alloc.svg -t 1786 
# cpu
./profiler.sh -d 10 -e cpu -f output-cpu.svg  --all-user 1786# trace 方法
./profiler.sh -d 10 -e com.wangji92.arthas.plugin.demo.common.profile.HotCode.hotMethod1 -f output-method.svg  --all-user 1786# cpu
./profiler.sh -d 10   -f output-cpu.svg  --all-user 1786#时钟信号
./profiler.sh -d 10 -e wall -f output-wall.svg  -t 1786# 支持的命令
./profiler.sh list  1786#帮助文档
./profiler.sh 

更多

更多可以参考这篇文章 可以更加深入的了解这个的使用

二、火焰图怎么看?

火焰图里,X轴越长,代表使用的越多,Y轴是调用堆栈信息。当前收集的是什么类型的数据,比如cpu 那么x轴长度越大,占用的cpu资源就越多~。
如何读懂火焰图?
使用Async-profiler 对程序性能优化实战

三、arthas async-profiler

arthas 结合了 async-profiler,看了一下源码和官方的一样的,调用本地方法进行处理,arthas 和 async-profiler 非常爽,命令相对于之前的简单了很多,async-profiler 的理解还是需要好好看一下官方的文档的!这篇文章写得不错,开始接触的时候看一下 使用Async-profiler 对程序性能优化实战。根据上面的一些官方文档 知道async-profiler 主要是解决哪些问题,结合上面的一个实战能够简单的理解火焰图。

基础命令

arthas + async-profiler 命令非常的简单,help profiler https://arthas.gitee.io/profiler.html
profiler start + 采集的命令 ; profiler stop 后即可查看 火焰图。

profiler start
# 等一会就可以查看了
profiler stop

采集信息

如async-profiler 官方一样 cpu、wall、alloc…等等 ,可以通过 下面的命令查看

profiler list#结果
Basic events:cpualloclockwallitimer
Java method calls:ClassName.methodName

这个东西要记住还是特别复杂的

arthas idea 插件简化记忆

这个命令复杂?? 哈哈,更多了解 https://github.com/WangJi92/arthas-idea-plugin 这个版本还未2.13 还未发布敬请期待。想了解 添加钉钉群 32102545 沟通。

profiler start --event alloc --all-user --interval 10000000 --threads

在这里插入图片描述

arthas 交流群看到的~ 有兴趣的看一下
1)jprofiler/ async profiler 可以通过分析采样数据,看到聚合统计的方法时间
2)flare-profiler 通过分析采样数据,建立有时间维度的方法调用分析树,可以看到任意一次方法调用估算时间
https://github.com/kylixs/flare-profiler/

四、参考文档

官方文档
async-profiler采样分析器
超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
https://www.wdbyte.com/2019/12/async-profiler/
Async-profiler介绍
使用Async-profiler 对程序性能优化实战
如何读懂火焰图?

五、总结

从编写插件到了解这个火焰图,用了一整天的来了解这个玩意,看了一些实践的例子,希望当我真正使用的适合能够带给我帮助吧!async-profiler 是基于样本的,对于收集的维度 一般为cpu 要查看一下是否收集到信息 profiler getSamples,火焰图展示的是当前时间段内的一些统计,对于当前时间段相关数据有一点的参考价值。

这篇关于arthas 火焰图神器-async-profiler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091562

相关文章

以后写代码都是AI自动写了,Cursor+Claude-3.5-Sonnet,Karpathy 点赞的 AI 代码神器。如何使用详细教程

Cursor 情况简介 AI 大神 Andrej Karpathy 都被震惊了!他最近在试用 VS Code Cursor +Claude Sonnet 3.5,结果发现这玩意儿比 GitHub Copilot 还好用! Cursor 在短短时间内迅速成为程序员群体的顶流神器,其背后的原因在于其默认使用 OpenAI 投资的 Claude-3.5-Sonnet 模型,这一举动不仅改变了代码生成

OBItools:Linux下的DNA条形码分析神器

在生物信息学领域,DNA条形码分析是一种非常常见的研究方法,用于物种鉴定、生态学和进化生物学研究。今天要介绍的工具就是专为此设计的——OBItools。这个工具集专门用于处理生态学和进化生物学中的DNA条形码数据,在Linux环境下运行。无论你是本科生还是刚入门的科研人员,OBItools都能为你提供可靠的帮助。 OBItools的功能亮点 OBItools是一个强大的工具包,特别适合DNA条形

Arthas问题排查工具

简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码;实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 。支持JDK 6+,支持Linux/Mac/Windows。这个工具真的很好用,而且入门超简单,十分推荐。 使用场景 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没

AI文献综述神器,有这一款就够了!

我是娜姐 @迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 当前的AI辅助文献综述的工具有很多,如果说功能最强大的,娜姐无疑要推SciSpace了。 SciSpace利用强大的AI算法,理解并建立研究论文之间的联系,可以大大提升文献综述的质量和效率。并且其功能还在不断更新和完善。        1 强大的语义搜索功能 传统的关键词搜索可能会遗漏相关文献,Sc

【JavaScript】defer和async的区别

转载自:https://segmentfault.com/q/1010000000640869 先来试个一句话解释仨,当浏览器碰到 script 脚本的时候: <script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读

全能AI神器!工作效率提升80倍!Zmo.ai带你玩转AI做图!

今天,我要给大家介绍一款神器:Zmo.ai。 这个平台简直是做图神器,集多种功能于一身,让你像专业人士一样轻松创建和编辑图像,不需要任何美术与设计基础,真的非常适合我们这些“手残党”! 我们只需单击按钮即可从文本或图像生成令人惊叹的 AI 艺术、图像、动漫和逼真的照片,最关键的是它的功能真的很全啊! Zmo.ai旗下产品分类: AI照片生成器 AI动漫生成器 AI照片编辑器 A

PDF转PPT神器揭秘!3步操作,轻松打造2024年会议爆款PPT

现在是数字化的时代,PDF 和 PPT 对职场的人来说可重要了。PDF 文件格式稳,也好分享,所以大家都爱用。PPT 演示起来很厉害,在开会、讲座的时候特别管用。不过呢,要是有好多 PDF 文件,咋能快点把它们变成好看的 PPT 呢?这是很多职场人都发愁的事儿。今天呢,我给大家讲讲三款能把 PPDF转PPT的好工具,只要简单三步,就能让你轻松做出 2024 年开会用的爆款 PPT。 一、福昕高级

Windows 一键定时自动化任务神器 zTasker,支持语音报时+多项定时计划执行

简介 zTasker(详情请戳 官网)是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具,支持win7-11。其支持超过100种任务类型,50+种定时/条件执行方法,而且任务列表可以随意编辑、排列、移动、更改类型,支持任务执行日志,可覆盖win自带的热键,同时支持任务列表等数据的备份及自动更新等。 简言之,比微软系统自带的任务计划要强好几倍,至少灵活性高多了,能大幅提高电脑使

加密方式的判断---神器 hash_identifier

加密作为保障数据安全的一种方式,它不是现在才有的,它产生的历史相当久远,它是起源于要追溯于公元前2000年(几个世纪了),虽然它不是现在我们所讲的加密技术(甚至不叫加密),但作为一种加密的概念,确实早在几个世纪前就诞生了。当时埃及人是最先使用特别的象形文字作为信息编码的,随着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息。 加密在网络上的作用就是防止有用或私有

async-http-android框架的介绍和二次封装

1。先谈谈框架吧 相信大家一看,就应该想到是一款异步请求的框架了,也就是说他的网络请求是在非UI线程中执行的,而callback在创建他的线程中,应用了Handler的机制。 项目本生的官方网址:http://loopj.com/android-async-http/, 对应的github地址: https://github.com/loopj/android-async-http