searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

arthas在问题排查中的应用

2023-08-31 05:38:42
3
0

1.    简介

        arthas是阿里巴巴一款开源的java诊断工具,arthas本身也是通过java进行开发的。arthas能实现在应用程序服务不停止的场景下,将arthas的jar包动态的加载到应用的jvm中,从而实现动态修改应用程序中在jvm上运行的字节码,达到对应用程序增强的效果。

        在日常测试或线上运行应用程序的时候,遇到如下场景的时候,可使用arthas协助进行问题排查。

  • 应用程序无法进行debug,日志打印不完善。
  • 需排查接口耗时位置。
  • 需查看接口入参参数,接口未打印入参数据的情况下。
  • 需排查阻塞线程。
  • 需要查看某个变量的值。

        上述场景只是在我们项目中用的比较多的场景,arthas本身支持的功能是非常强大的,需要的小伙伴可查看更详细的资料进行学习,这里仅介绍我们业务中的一些使用场景。

2.    arthas安装与启动

        arthas由于是基于java开发的,因此使用环境上需提前安装好jdk,arthas依赖的jdk版本最低为1.6。

        arthas的安装可通过源地址进行下载,也可以通过安装包直接进行解压使用。我们环境中使用的是第二种方式,下载arthas-packaging-3.6.9-bin.zip包,拷贝到环境指定目录下,执行如下命令进行解压:

unzip arthas-packaging-3.6.9-bin.zip

        得到解压后的目录如下:

        linux中直接使用如下命令进行启动即可:

sh as.sh

       

        启动后,arthas会扫描环境中所有的java应用程序,如上图所示,arthas启动时扫描到jar包为detections-1.0.jar、进程号为9476的应用程序,指定需操作的应用程序时,只需指定进程号前面的序号即可,上图中指定的序号为1。指定完成后,arthas会启动完成,并进入到命令行交互界面。此时arthas就可以正常的使用了。

3.    测试使用场景分析

3.1    trace命令

        在测试接口性能时,尤其关注接口的并发能力和执行正确率,而接口的并发能力又与接口单次执行时间相关,通过trace命令可打印出接口内部操作时间,时间单位为毫秒,可以通过打印清楚的看出接口中每个方法的耗时时间及耗时占比,耗时较高的方法还会高亮将时间标出。

        trace命令格式:

trace class method

举例:

trace com.ctcc.kk.test.TestController testGetInfo

        可通过-n命令指定对方法的追踪次数

trace class method -n count

举例:

trace com.ctcc.kk.test.TestController testGetInfo -n 1

        可通过#cost命令指定只追踪大于指定时间的接口调用,时间单位为毫秒。

trace class method #cost>time

举例:

trace com.ctcc.kk.test.TestController testGetInfo #cost>100

3.2    watch命令

        watch命令能够追踪方法的返回值、执行异常、入参等,由于异常通常能在日志中打印,所以在项目中日志不完善的情况下,问题排查中用的较多的时查看方法入参和方法返回值。

        watch命令格式:

watch class method 表达式

举例:

watch com.ctcc.kk.test.TestController testGetInfo "{params,returnObj}" -x 2

        其中表达式使用的是ognl表达式,可通过表达式指定查看入参、返回值或属性,并可指定入参条件,如只追踪某个入参大于某个值的调用。watch命令默认追踪的是方法调用后,也可通过命令指定方法调用之前、方法异常之后、方法返回之后。

3.3    monitor命令

        monitor命令用来追踪指定时间段内指定方法的执行次数、成功次数、失败次数、平均耗时时间等。通常在压力测试中可用来观察指标。

        monitor命令格式:

monitor class method -c time

举例:

monitor com.ctcc.kk.test.TestController testGetInfo -c 10

        -c命令为指定统计周期,单位为秒,不指定时默认为120秒。

3.4    jad命令

        在排查问题时,有时会发现日志中打印的记录与代码中的匹配不上,此时可通过jad命令反编译指定类或指定方法来查看使用的版本是否正确。

        jad命令格式:

jad class [method]

举例:

jad com.ctcc.kk.test.TestController

        此处代码不进行详细展示,只进行示例展示。

3.5    thread命令

        测试过程中,有时候会遇到线程阻塞的问题,通过thread命令可查询到阻塞的线程,进而找到相对应的代码。

        thread命令格式:

thread

        此命令可列出所有线程及其状态。

        通过指定线程号,可查看具体信息

thread thread-id

        通过如下命令可查看阻塞线程:

thread -b

4.    总结

arthas在排查问题上功能非常强大,上述也只是列举了项目中比较常用的一些功能和命令,需要其他功能的小伙伴可查看更详细的官网文档。另外,arthas需要占用一定的资源,对于应用程序部署的服务器资源较小的,会有一定影响,在使用时需进行权衡。

0条评论
0 / 1000
h****n
2文章数
0粉丝数
h****n
2 文章 | 0 粉丝
h****n
2文章数
0粉丝数
h****n
2 文章 | 0 粉丝
原创

arthas在问题排查中的应用

2023-08-31 05:38:42
3
0

1.    简介

        arthas是阿里巴巴一款开源的java诊断工具,arthas本身也是通过java进行开发的。arthas能实现在应用程序服务不停止的场景下,将arthas的jar包动态的加载到应用的jvm中,从而实现动态修改应用程序中在jvm上运行的字节码,达到对应用程序增强的效果。

        在日常测试或线上运行应用程序的时候,遇到如下场景的时候,可使用arthas协助进行问题排查。

  • 应用程序无法进行debug,日志打印不完善。
  • 需排查接口耗时位置。
  • 需查看接口入参参数,接口未打印入参数据的情况下。
  • 需排查阻塞线程。
  • 需要查看某个变量的值。

        上述场景只是在我们项目中用的比较多的场景,arthas本身支持的功能是非常强大的,需要的小伙伴可查看更详细的资料进行学习,这里仅介绍我们业务中的一些使用场景。

2.    arthas安装与启动

        arthas由于是基于java开发的,因此使用环境上需提前安装好jdk,arthas依赖的jdk版本最低为1.6。

        arthas的安装可通过源地址进行下载,也可以通过安装包直接进行解压使用。我们环境中使用的是第二种方式,下载arthas-packaging-3.6.9-bin.zip包,拷贝到环境指定目录下,执行如下命令进行解压:

unzip arthas-packaging-3.6.9-bin.zip

        得到解压后的目录如下:

        linux中直接使用如下命令进行启动即可:

sh as.sh

       

        启动后,arthas会扫描环境中所有的java应用程序,如上图所示,arthas启动时扫描到jar包为detections-1.0.jar、进程号为9476的应用程序,指定需操作的应用程序时,只需指定进程号前面的序号即可,上图中指定的序号为1。指定完成后,arthas会启动完成,并进入到命令行交互界面。此时arthas就可以正常的使用了。

3.    测试使用场景分析

3.1    trace命令

        在测试接口性能时,尤其关注接口的并发能力和执行正确率,而接口的并发能力又与接口单次执行时间相关,通过trace命令可打印出接口内部操作时间,时间单位为毫秒,可以通过打印清楚的看出接口中每个方法的耗时时间及耗时占比,耗时较高的方法还会高亮将时间标出。

        trace命令格式:

trace class method

举例:

trace com.ctcc.kk.test.TestController testGetInfo

        可通过-n命令指定对方法的追踪次数

trace class method -n count

举例:

trace com.ctcc.kk.test.TestController testGetInfo -n 1

        可通过#cost命令指定只追踪大于指定时间的接口调用,时间单位为毫秒。

trace class method #cost>time

举例:

trace com.ctcc.kk.test.TestController testGetInfo #cost>100

3.2    watch命令

        watch命令能够追踪方法的返回值、执行异常、入参等,由于异常通常能在日志中打印,所以在项目中日志不完善的情况下,问题排查中用的较多的时查看方法入参和方法返回值。

        watch命令格式:

watch class method 表达式

举例:

watch com.ctcc.kk.test.TestController testGetInfo "{params,returnObj}" -x 2

        其中表达式使用的是ognl表达式,可通过表达式指定查看入参、返回值或属性,并可指定入参条件,如只追踪某个入参大于某个值的调用。watch命令默认追踪的是方法调用后,也可通过命令指定方法调用之前、方法异常之后、方法返回之后。

3.3    monitor命令

        monitor命令用来追踪指定时间段内指定方法的执行次数、成功次数、失败次数、平均耗时时间等。通常在压力测试中可用来观察指标。

        monitor命令格式:

monitor class method -c time

举例:

monitor com.ctcc.kk.test.TestController testGetInfo -c 10

        -c命令为指定统计周期,单位为秒,不指定时默认为120秒。

3.4    jad命令

        在排查问题时,有时会发现日志中打印的记录与代码中的匹配不上,此时可通过jad命令反编译指定类或指定方法来查看使用的版本是否正确。

        jad命令格式:

jad class [method]

举例:

jad com.ctcc.kk.test.TestController

        此处代码不进行详细展示,只进行示例展示。

3.5    thread命令

        测试过程中,有时候会遇到线程阻塞的问题,通过thread命令可查询到阻塞的线程,进而找到相对应的代码。

        thread命令格式:

thread

        此命令可列出所有线程及其状态。

        通过指定线程号,可查看具体信息

thread thread-id

        通过如下命令可查看阻塞线程:

thread -b

4.    总结

arthas在排查问题上功能非常强大,上述也只是列举了项目中比较常用的一些功能和命令,需要其他功能的小伙伴可查看更详细的官网文档。另外,arthas需要占用一定的资源,对于应用程序部署的服务器资源较小的,会有一定影响,在使用时需进行权衡。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0