天天看点

Java诊断工具 Arthas是什么安装以及开始使用常见命令以及使用问题场景解决

是什么

        Arthas

是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。可以解决如下常见问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从JVM内查找某个类的实例?

安装以及开始使用

https://arthas.aliyun.com/doc/quick-start.html

常见命令以及使用

https://arthas.aliyun.com/doc/commands.html

问题场景解决

  1. 方法内部调用路径,并输出方法路径上的每个节点上耗时 trace xx类.xx方法  run

    $ trace demo.MathGame run
    Press Ctrl+C to abort.
    Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
    `---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;[email protected]
        `---[10.611029ms] demo.MathGame:run()
            +---[0.05638ms] java.util.Random:nextInt()
            +---[10.036885ms] demo.MathGame:primeFactors()
            `---[0.170316ms] demo.MathGame:print()
    过滤掉jdk的函数    trace -j  demo.MathGame run
    调用耗时过滤     trace demo.MathGame run '#cost > 10'
               
  2. watch 查看方法入参,出参信息。stack 查看方法的调用路径。tt 命令可以记录打印出某方法的执行详情,并观察不同时间,不同入参的执行情况。【大多是线下无法重现问题,而线上又不能有debug环境时】
  3. 使用 dashboard 命令可以概览程序的 线程、内存、GC、运行环境信息。
  4. 使用 thread查看所有线程信息,同时会列出每个线程的

    CPU

    使用率,可以看到图里 ID 为12 的线程 CPU 使用100%。
  5. 如果只是为了寻找 CPU 使用较高的线程,可以直接使用命令 thread -n [显示的线程个数] ,就可以排列出 CPU 使用率 Top N 的线程。