Arthas: Arthas 4.0计划

Created on 20 Feb 2019  ·  15Comments  ·  Source: alibaba/arthas

提供一个新的字节码框架,名为bytekit

  • 支持两种方式:应用启动时配置为agent和动态attach
  • 提供方便的annotation实现字节码的操作
  • 避免重复增强
  • 支持行号的字节码操作
  • 支持查看局部变量
  • 提供api可以实现apm功能

支持加载外部的插件

  • 可以配置外部插件目录
  • 使用方可以通过API编写自己的插件

view分层

  • 类似spring mvc的model/view结构telnet view对应目前的命令行模式
  • http view返回json格式,方便做web交互和展示

欢迎大家讨论提出意见😄

4.0 disscuss

Most helpful comment

非常期待基于 MVC 的 restful-api 功能,毕竟不是随时都能通过 shell 登录到服务器,如果有 restful-api,就可以开发 dashboard 来管理和查看了;

All 15 comments

由于采用的是GPL协议,自己编写的插件,需要开源吗?

由于采用的是GPL协议,自己编写的插件,需要开源吗?

java的jar属于动态链接库的范畴,不需要开源。

arthas未来在性能调优上有什么计划吗? 我个人理解,目前arthas的主要功能还是体现在看到问题后的排查上,但发现问题的能力比较弱。

arthas未来在性能调优上有什么计划吗? 我个人理解,目前arthas的主要功能还是体现在看到问题后的排查上,但发现问题的能力比较弱。

  • 性能调优是多方向的,热点方法,CPU,内存,GC等
  • 纯字节码修改的方案,只能在热点方法上有作为。但是修改得越多字节码,对性能就越多影响。Arthas只能对特定的一些类做trace
  • 长期来看,性能调优是一个方向,但短期没有太好的办法

非常期待基于 MVC 的 restful-api 功能,毕竟不是随时都能通过 shell 登录到服务器,如果有 restful-api,就可以开发 dashboard 来管理和查看了;

@hengyunabc bytekit 什么时候能推

我遇到了几次这样的场景:

  1. 某个method会偶尔触发bug, 导致cpu 100%, 由于日志的缺失, 不能确定到底是什么入参触发了method的bug;
  2. 因为Filter的bug, 某个(或某些)特定HTTP请求在被Dispatch到具体的业务Controller之前, 在Tomcat内部就发生了错误, 导致死循环, 同样的的因缺少日志打印, 而不能迅速定位是哪个url请求触发了bug;

如果采用Arthas的watch机制, 也就意味着不能直接从已经出错的线程栈堆栈中提取变量信息, 而必须等待下次bug触发才能获取到一些信息;
但是在已经出错的线程栈帧中, 应该是有method调用链路中一些变量信息的, 如果能够展示出来, 或许对迅速定位bug原因有极大帮助.

我没有在Arthas 3.1.1版本文档中找到类似的功能, 也可能是我对文档漏读或误读忽略了该功能.

支持查看局部变量,这个是会在4.0版本支持吗?这个功能就是能够类似于本地debug时一样,能够看到所有的局部变量是吧?

感觉上面说的很多功能,jvm-sandbox已经都实现了,比如启动的2种方式,比如可通过annotation实现字节码操作、支持行号的字节码操作等,为什么要重复再做一遍呢~

期待4.0版本

有没有可能将arthas的挂载和jvm-sandbox结合?
就像jvm-sandbox-repeater的启动方式一样。

以后会考虑对core dump文件的支持吗?最近线上机器频繁crash,但是面对core dump 文件一脸茫然

我遇到了几次这样的场景:

  1. 某个method会偶尔触发bug, 导致cpu 100%, 由于日志的缺失, 不能确定到底是什么入参触发了method的bug;
  2. 因为Filter的bug, 某个(或某些)特定HTTP请求在被Dispatch到具体的业务Controller之前, 在Tomcat内部就发生了错误, 导致死循环, 同样的的因缺少日志打印, 而不能迅速定位是哪个url请求触发了bug;

如果采用Arthas的watch机制, 也就意味着不能直接从已经出错的线程栈堆栈中提取变量信息, 而必须等待下次bug触发才能获取到一些信息;
但是在已经出错的线程栈帧中, 应该是有method调用链路中一些变量信息的, 如果能够展示出来, 或许对迅速定位bug原因有极大帮助.

我没有在Arthas 3.1.1版本文档中找到类似的功能, 也可能是我对文档漏读或误读忽略了该功能.

@pan3793 是不是要类似debug时查看线程不同栈帧的方法参数、局部变量功能?

我遇到了几次这样的场景:

  1. 某个method会偶尔触发bug, 导致cpu 100%, 由于日志的缺失, 不能确定到底是什么入参触发了method的bug;
  2. 因为Filter的bug, 某个(或某些)特定HTTP请求在被Dispatch到具体的业务Controller之前, 在Tomcat内部就发生了错误, 导致死循环, 同样的的因缺少日志打印, 而不能迅速定位是哪个url请求触发了bug;

如果采用Arthas的watch机制, 也就意味着不能直接从已经出错的线程栈堆栈中提取变量信息, 而必须等待下次bug触发才能获取到一些信息;
但是在已经出错的线程栈帧中, 应该是有method调用链路中一些变量信息的, 如果能够展示出来, 或许对迅速定位bug原因有极大帮助.
我没有在Arthas 3.1.1版本文档中找到类似的功能, 也可能是我对文档漏读或误读忽略了该功能.

@pan3793 是不是要类似debug时查看线程不同栈帧的方法参数、局部变量功能?

@kylixs 是这样的

有gc分析就好,例如 列出 大对象。有时候遇上莫名其妙的gc,不知从何分析。求解

Was this page helpful?
0 / 5 - 0 ratings