(1条消息) 阿尔萨斯简单使用

  • $ wget --no-check-certificate  https://alibaba.github.io/arthas/arthas-boot.jar
    # github比较慢的话可以使用
    $ wget --no-check-certificate https://arthas.gitee.io/arthas-boot.jar
  • 启动

    $ java -jar arthas-boot.jar
    # 如果下载速度比较慢,可以使用aliyun的镜像
    $ java -jar arthas-boot.jar --repo-mirror aliyun --use-http

JSON格式查看结果

# json-format 是否支持json化的输出,默认false
$ options json-format true

常用命令

trace 分析性能

方法内部调用路径,并输出方法路径上的每个节点上耗时

  • 使用例子

    • 基本使用

      # trace 类名 方法名
      $ trace bp.ScheduleBP queryWebSchedule
    • 过滤掉jdk的函数

      # -j 过滤掉jdk的函数耗时
      $ trace -j bp.ScheduleBP queryWebSchedule
    • 根据耗时过滤

      # 只会展示耗时大于10ms的调用路径
      $ trace bp.ScheduleBP queryWebSchedule '#cost > 10'
    • 限制执行次数

      # 监控10次后退出
      $ trace bp.ScheduleBP queryWebSchedule -n 10
    • trace多个类或者多个函数

      # 可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果。
      $ trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

watch 分析入参出参等

方法执行数据观测,查看方法入参,出参,更建议使用tt

参数名称 参数说明
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
express 观察表达式
condition-express 条件表达式
[b] 方法调用之前观察
[e] 方法异常之后观察
[s] 方法返回之后观察
[f] 方法结束之后(正常返回和异常返回)观察
[E] 开启正则表达式匹配,默认为通配符匹配
[x] 指定输出结果的属性遍历深度,默认为 1
  • 使用例子

    • 观察方法出参和返回值

      $ watch bp.ScheduleBP queryWebSchedule "{params,returnObj}" -x 2
    • 观察方法入参

      # 事件点为方法执行前,因此获取不到返回值
      $ watch bp.ScheduleBP queryWebSchedule "{params,returnObj}" -x 2 -b
    • 同时观察方法调用前和方法返回后

      # 参数里-n 2,表示只执行两次
      # 第一次输出的是方法调用前的观察表达式的结果,第二次输出的是方法返回后的表达式的结果
      # 结果的输出顺序和事件发生的先后顺序一致,和命令中 -s -b 的顺序无关
      $ watch bp.ScheduleBP queryWebSchedule "{params,target,returnObj}" -x 2 -b -s -n 2
    • -x含义:遍历深度

      # -x表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1
      $ watch bp.ScheduleBP queryWebSchedule "{params,returnObj}" -x 1
      $ watch bp.ScheduleBP queryWebSchedule "{params,returnObj}" -x 2
    • 观察当前对象中的属性

      # 当前对象中的属性,可以使用target关键字,代表当前对象
      $ watch bp.ScheduleBP queryWebSchedule 'target'
      # 然后使用target.field_name访问当前对象的某个属性
      $ watch bp.ScheduleBP queryWebSchedule 'target.cacheMap'

profiler

使用async-profiler生成火焰图

# 启动profiler
$ profiler start
# 获取已采集的sample的数量
$ profiler getSamples
# 查看profiler状态
$ profiler status
# 停止profiler,默认生成svg格式
$ profiler stop
# 停止profiler,指定保存位置
$ profiler stop --file /tmp/output.svg
# 停止profiler,指定HTML格式
$ profiler stop --format html

默认情况下,生成的是cpu的火焰图,即event为cpu。可以用--event参数来指定。

tt 批量记录入参出参等

记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

参数名称 参数说明
-d 删除指定的记录,需要指定-i参数
--delete-all 删除全部记录
-x 指定输出结果的属性遍历深度,默认为
-i 显示指定index的记录的详情
-n 记录次数限制
-l 列出所有记录
-p 重新执行一条记录(重发请求)
--replay-interval 搭配-p,重发间隔
--replay-times 搭配-p,重发次数
-w ognl参数,例如params;params[0];params[0].size();returnObj
-t 记录方法调用
  • 使用例子

    • 记录大于50ms的方法调用

      # 记录方法调用
      $ tt -t bp.ScheduleBP queryWebSchedule '#cost > 50'
    • 查看index为1004的记录的详情

      # 查看index为1004的记录的详情
      $ tt -i 1104
    • 查看index为1004的记录的第三个请求参数

      $ tt -i 1104 -w params[2]
    • 记录第一个请求参数长度小于3的

      $ tt -t utils.ScheduleUtil init 'params[0].size()<3'
    • 记录方法调用

      # 记录方法调用
      $ tt -t bp.ScheduleBP queryWebSchedule

dashboard

数据说明

当前系统的实时数据面板,按 ctrl+c 退出。

  • ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应

  • NAME: 线程名

  • GROUP: 线程组名

  • PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高

  • STATE: 线程的状态

  • CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。

  • TIME: 线程运行总时间,数据格式为分:秒

  • INTERRUPTED: 线程当前的中断位状态

  • DAEMON: 是否是daemon线程

thread

查看当前线程信息,查看线程的堆栈

参数名称 参数说明
id 线程id
[n:] 指定最忙的前N个线程并打印堆栈
[b] 找出当前阻塞其他线程的线程
[i] 指定cpu占比统计的采样间隔,单位为毫秒

基础命令

  • reset

    • 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

  • stop/shutdown

    • 关闭 Arthas 服务端,所有 Arthas 客户端全部退出

  • quit/exit

    • 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

    • 退出Arthas之后,还可以再次用 java -jar arthas-boot.jar 来连接。

    • exit/quit命令只是退出当前session,arthas server还在目标进程中运行。

    • 一定要记得彻底退出

(0)

相关推荐