arthas的搭建和使用

本文介绍了阿里云开发的Arthas工具,它支持实时监控应用性能、查看方法调用详情、反编译与在线编译,以及在无dashboard场景下的应用诊断。通过实例和案例,展示了如何使用Arthas进行问题排查和性能优化。
摘要由CSDN通过智能技术生成

简介

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率

常用命令

dashboard

用于显示当前被attach程序的实时数据,包括:线程,内存,系统等实时信息

相关参数有:

i: 时间间隔多久采集一次

n:采集次数

dashboard -i 3000 -n 5

示例如下:

sc

search-class的简写,用于显示被jvm加载的类的详细信息,包括类加载器的hashCode地址(后续多个命令需要用到的-c参数的值)

实例如下:

sc -d  com.lyc.test.demo.service.TestService

注意列:class-loader列显示的就是该的类加载器信息

logger

用于显示日志的详细信息和修改日志级别

试想一下如果线上环境某个sql执行报错且无法简单的排查时,如果能打印执行的sql时是不是可以快速的定位?

查看logger的详细信息

此处显示Root的日志级别是info,如果想要修改某个类的日志显示级别

logger -c 685f4c2e --name com.lyc.test.demo.controller.TestController --level debug

其中-c后面跟的参数是该类的类加载器的hashcode值,通过sc -d命令可以查询

jad&mc

反编译和编译

jad用于直接在线上反编译对应的.class为.java文件

使用示例:

jad -c 685f4c2e --source-only com.lyc.test.demo.controller.TestController

如果后面接管道命令可以把反编译后的内容输入到指定的文件

jad -c 685f4c2e --source-only com.lyc.test.demo.controller.TestController > /root/TestController.java

mc -d /root/ /root/TestController.java 可以用于在线编译.java文件为.class文件,后续可以直接用编译好的文件结合redefine或者retransfer命令加载到JVM中,实现热更新

trace&stack&watch

trace命令用于跟踪类|方法的调用栈的耗时情况,在性能调优和问题排查过程中经常使用到

如上图,如下是一次请求的显示内容

stack命令用于跟踪方法的调用栈,在追踪方法调用逻辑时经常使用

watch命令用于观察方法调用的情况,包括请求参数,返回值,是否有异常等

其中命令参数 -x 2表示打印的参数|返回值的层级

tt

时空隧道命令,用于记录下请求的所有信息,一般的:tt -t  className method -n 3

其中-t表示打印详细信息,-n表示收集多少次结束

搜集到相关信息之后,可以通过tt -i 查看当时请求的详细信息

redefine&retransfer

redefine用于加载外部的.class文件到jvm中,在以上讲解jad和mc命令时已有过简单介绍

比如在线上出现一个简单的bug,如果线上重新走发版流程会非常麻烦,耗时也长,可以直接通过jad反编译代码,然后修改,再编译,直接使用redefine命令加载即可

详细的命令清单可以查看arthas官网:简介 | arthas

dashboard接入

1 启动 arthas-tunnel-server

  从github上下载:Releases · alibaba/arthas · GitHub

或者maven下载:maven-central: v3.7.2

arthas-tunnel-server是一个fatjar,可以直接通过java -jar命令启动,开通了2个端口:8080,7777

其中8080用于页面交互的http端口,其中7777是用于和应用接入端交互的端口,页面如下

2 应用端接入

一个springboot应用要接入arthas,只需做如下操作

1 引入依赖:
<dependency>
     <groupId>com.taobao.arthas</groupId>
     <artifactId>arthas-spring-boot-starter</artifactId>
     <version>3.7.2</version>
</dependency>
2 配置文件
arthas:
  agent-id: test-demo-123
  tunnel-server: ws://192.168.56.105:7777/ws
  telnet-port: -1
  http-port: -1

其中arthas.agent-id是用于在dashboard端连接到应用端的唯一标识,每个应用实例要配置得不一样

如此配置,即可以在arthas-tunel-server的页面端连接到应用测做应用诊断

连接上之后,即可使用以上介绍的命令对应用做诊断了

无dashboard使用

如果应用没有做相关的jar依赖,依然可以使用arthas做应用诊断

1  下载arthas-boot.jar

在线下载:curl -O https://arthas.aliyun.com/arthas-boot.jar

或者将下载好的jar包上传到对应的服务器上

2  启动arthas做应用诊断

java -jar arthas-boot.jar

此时会显示该服务器上被检测到的java进程和对应的index,此时只需要选择对应的java进程index即可

这样arthas就已经attach到对应的应用上了,后续可以执行以上提到的相关命令做应用诊断即可

案例分享

线上问题排查,一不小心踩到阿里的 arthas坑了 | HeapDump性能社区

Java线程数过多解决之路——利用Arthas解决Jenkins线程数飙升问题 | HeapDump性能社区

记一次通过Arthas定位解决spring-boot中内嵌tomcat的Bug问题 | HeapDump性能社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值