JVM 调优篇10 使用arthas排优

一 Arthas的作用

1.1 作用

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

2.是否有一个全局视角来查看系统的运行状况?

  1. 有什么办法可以监控到JVM的实时运行状态?

  2. 怎么快速定位应用的热点,生成火焰图?

二 安装操作

2.1 linux的安装

下载arthas-boot.jar 然后运行 java -jar 的方式启动

2.2 windows的安装

在c:\下创建目录arthas,在windows命令窗口下,使用curl命令下载阿里服务器上的jar包,大小约诶108k。

  1. 使用java启动arthas-boot.jar,来安装arthas,大小约10M。运行此命令会发现java进程,输入1
    按回车。则自动从远程主机上下载arthas到本地目录

    3.查看安装目录

三 常用操作

3.1 操作api


输入dashboard命令

输入thread命令

输入monitor命令

四 通过arthas生成火焰图

4.1 profile命令

profiler 命令支持生成应用热点的火焰图。本质上是 通过不断的采样,然后把收集到的采样结果生成火焰图。

4.2 火焰图的解析

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高**,顶部就是正在执行的函数,下方都是它的父函数。**

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

最顶层的函数g()占用 CPU 时间最多。d()的宽度最大,但是它直接耗用 CPU 的部分很少。b()和c()没有直接消耗 CPU。因此,如果要调查性能问题,首先应该调查g(),其次是i()。

另外,从图中可知a()有两个分支b()和h(),这表明a()里面可能有一个条件语句,而b()分支消耗的 CPU 大大高于h()。

Arthas profiler(使用async-profiler对应用采样,生成火焰图)_51CTO博客_async.art

4.3 常用命令

1.常用命令

2.操作命令

1启动profiler,默认情况下,生成的是 cpu 的火焰图,即 event 为cpu。可以用--event参数指定其他性能分析模式,见下文。

$ profiler start

Started [cpu] profiling

2.显示支持的事件

profiler list

3.获取已采集的sample的数量

$ profiler getSamples

23

4.查看profiler状态(可以查看当前profiler在采样哪种event和采样时间。

$ profiler status

[cpu] profiling is running for 4 seconds

5.停止profiler,并同步生成文件(默认在工作目录下的arthas-output目录。)

$ profiler stop

profiler output file: /tmp/demo/arthas-output/20240919-155147.svg

通过 --file参数来指定输出结果路径,在--file参数指定的文件名后缀为 html 或 jfr 时,文件格式可以被推断出来。比如--file /tmp/result.html 将自动生成火焰图。

指定生成的文件名以及路径

profiler stop --file /tmp/result.svg

6.生成html文件

可以用--format指定生成格式,默认情况下,结果是 Flame Graph格式的 html 文件,也可以用 -o 或 --format 参数指定其他内容格式,包括 flat、traces、collapsed、flamegraph、tree、jfr。

profiler stop --format html

4.4 操作案例截图

相关推荐
Theodore_10221 天前
7 设计模式原则之合成复用原则
java·开发语言·jvm·设计模式·java-ee·合成复用原则
我是苏苏1 天前
Web开发:ORM框架之使用Freesql的DbFrist封装常见功能
java·前端·jvm
天草二十六_简村人1 天前
Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
java·jvm·数据库·mongodb·阿里云·微服务·云计算
老码沉思录1 天前
Android开发实战班 - 数据持久化 - Room 数据库应用
android·jvm·数据库
起名字真南1 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc
偶尔。5351 天前
JVM垃圾回收算法详解
jvm
飞滕人生TYF1 天前
在 for 循环中,JVM可能会将 arr.length 提升到循环外部,仅计算一次。可能会将如何解释 详解
java·jvm
customer081 天前
【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)
java·jvm·vue.js·spring boot·spring cloud·java-ee·开源
CAORENZHU1 天前
JVM垃圾回收详解.②
jvm
Code0cean2 天前
从零开始学习JVM(九)- 垃圾收集器
jvm