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:搜索,匹配的方法高亮显示
- 【注意】:如果你的项目调用了其他框架,则不会显示你的方法,所以火焰图其实分析不出个啥