• Java诊断神器:Arthas常用功能


    最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html

    Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连接运行的Java进程、主要通过交互式来完成功能。

    下面总结下工作中经常用到的功能。

    运行

    在执行java -jar arthas-boot.jar前,务必先保证有java进程在运行

     选择要粘附的进程,输入编号即可,下面输入3

    也可以通过浏览器连接arthas,只是执行命令的时候需要加--target-ip参数

    dashboard

    查看线程,内存,GC等信息

    thread

    显示粘附的这个进程所有线程信息,和dashboard里面展示的线程一样

    thread -n 3,最繁忙的3个线程(占用cpu最多的前3个),输出栈信息

    thread n,查看某个指定的线程,输出栈信息

    thread -b,输出阻塞的线程栈信息,如果响应慢,阻塞状态的线程比较多,我们需要重点关注;关于线程的状态如何分析,后续再分享。

    thread |grep BLOCKED,找出阻塞状态的线程,下面看到有2个

    上面等价于thread --state BLOCKED

    ---------------------分割线,说明:下面是服务重启了,所以进程号和上面不一样---------------------------

    jvm

    重点关注下死锁(DEADLOCK-COUNT,下面不为0,表示有死锁),jvm相关的,用其它的监控方式

    根据下面的栈信息,可以看到,这两个线程互相请求被对方占用未释放的资源导致了死锁

    jad

    如果没有代码权限,可以使用反编译功能,反编译指定的类或者方法

    jad com.qzcsbj.controller.UserController mem,反编译指定方法,除了展示代码,还展示了类加载器的信息

    jad com.qzcsbj.controller.UserController,反编译指定的类,除了展示代码,还展示了类加载器的信息

    jad --source-only com.qzcsbj.controller.UserController,不显示类加载器信息,只显示代码

    sc

    Search Class,查看类信息(推荐jad)

    sc com.qzcsbj.*,可以模糊的方式

    sc -d com.qzcsbj.controller.UserController,根据上图结果,我们来查看类的详细信息

    下面可以看到类的路径、修饰符、注解、父类、类加载器

    sc -df com.qzcsbj.controller.UserController,查看类的filed,可以看到其名称、类型、修饰符

      

    sm

    Search Method,查看方法(推荐jad)

    sm -d com.qzcsbj.controller.UserController mem,显示方法的详情:修饰符、注解、参数、返回类型

    monitor以及tt

    监控方法的执行情况

    monitor com.qzcsbj.controller.UserController m -c 2,重点看成功次数、平均响应时间、失败率

    和tt类似,下面关注:耗时、IS-RET为false表示失败

    watch

    类似debug,查看被测方法的参数和返回值

    watch com.qzcsbj.controller.UserController login '{params, returnObj}' -x 2,其中-x表示深度

    入参是qzcsbj/123456,返回是msg/code

    trace

    跟踪方法内部调用,输出各个节点的耗时,主要用于响应慢的时候

    trace com.qzcsbj.controller.UserController m,找到耗时多的方法(下面标红的),然后我们就可以分析代码,看在执行什么操作了

    trace com.qzcsbj.controller.UserController m -n 2,一般需要输出多次结果,所以这里可以通过-n指定结果数量

    trace com.qzcsbj.controller.UserController m '#cost>1000',如果输出结果次数比较多,我们还可以对耗时进行过滤

    profiler(火焰图)

    系统cpu高的时候,我们可以看系统调用,相比于perf命令,profiler的步骤要更简便点,

    profiler start,启动,默认是生成cpu的火焰图,which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu

    profiler stop,停止,可以看到生成的svg文件路径

    浏览器访问

    关于如何看火焰图,我们看顶层最宽的。

    补充

    在做性能测试的时候,针对java应用,单纯靠arthas还是不够的,下面这些知识也需要掌握。

    最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html

    https://mp.weixin.qq.com/s/YUFAAyhCPgSb5WrJm_LWFA

    ============================= 好好学习 ==========================
    > > > 1、咨询问题,请加作者微信: ren168632201
    > > > 2、性能测试从0到实战: https://www.cnblogs.com/uncleyong/p/12311432.html
    > > > 3、自动化测试实战: https://www.cnblogs.com/uncleyong/p/12016690.html
    > > > 4、测试基础汇总: https://www.cnblogs.com/uncleyong/p/10530261.html
    > > > 5、声明:如有侵权,请联系删除。
    ============================= 升职加薪 ==========================
  • 相关阅读:
    iOS中block的探究
    输出IOS 版本号
    Luke's Homepage
    ObjectiveC: delegate的那点事儿
    浅谈XCode编译器的Blocks功能
    一个横版的tableViewFantasyView
    iOS中block的探究
    NSRunLoop 概述和原理
    Block使用中的一些疑问解答
    Flex 中的注释
  • 原文地址:https://www.cnblogs.com/uncleyong/p/14944401.html
Copyright © 2020-2023  润新知