首页 > 编程语言 > 详细

Java诊断工具 | Arthas

时间:2020-03-15 00:12:15      阅读:53      评论:0      收藏:0      [点我收藏+]

Java诊断工具 | Arthas

1. Arthas是什么

Arthas官网
Arthas 是Alibaba开源的Java诊断工具
Arthas可以帮助你解决:

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

2. Arthas的安装和使用

下载arthas-boot.jar,然后用java -jar的方式启动:

curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

3. jvm相关命令

3-1. dashboard当前系统的实时数据面板,ctrl + c中断

技术分享图片
dashboard

3-2. thread 查看jvm线程堆栈信息

  • thread 显示所有线程的概览
  • thread id显示指定线程ID的堆栈信息
  • thread -n 3查看当前最忙的前三个线程
  • thread -b找出现在阻塞其他线程的线程
  • thread -i 5000指定采样间隔,这个是采集5秒内的数据.会在5秒后返回统计信息
  • thread -state WAITING指定显示某种状态的线程

3-3. jvm 查看jvm整体概览,可以查看死锁

3-4. sysprop 查看系统的属性

3-5. sysenv 查看jvm的环境变量,包括jvm运行的main方法类

3-6. getstatic查看类的静态属性

3-7. ognl调用静态方法

  • ognl ‘@java.lang.System@out.println("hello")‘会在程序的控制台输出hello

4. class/classloader相关

4-1. sc 查看jvm已加载的类的信息search class,支持*号匹配

  • 可用参数
    • -d 列出类的详细信息,包括类名,类所在的位置,类的ClassLoader
    • -f 需要与-d同时使用,显示类的成员变量

4-2. sm 查看类的方法信息search method

  • 可用参数
    • -d展示详细方法描述(方法所在类,方法名,修饰符,入参,返回值)

4-3. jad [className] 反编译Class

4-4. mc 内存编绎器memory compile,把.java文件编译为.class文件

  • mc /temp/Test.java
  • 可通过-c指定类加载器mc -c 327a647b /tmp/Test.java
  • 可通过-d指定输出目录mc -d /tmp/output tmp/ClassA.java tmp.ClassB.java
  • 可以配合redefine命令实现热更新代码

4-5. redefine加载外部的.class文件,redefine jvm已加载的类

  • redefine /tmp/Test.class
  • redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
  • redefine的限制
    • 不允许新增field和method
    • 正在跑的函数,没有退出不能生效,因为没退出的话,一直在栈中,代码无法重新加载,其他方法能够出栈重新在入栈后就是已经修改后的代码了.

4-6. dump dump已加载类的byte code到特定目录

  • dump java.lang.String 将String的class文件dump到指定位置,会显示具体位置在哪里

4-7. classloader查看所有加载的类信息,classloader信息

  • classloader 展示出所有已加载的类
  • classloader -l 展示每个classloader加载了多少类
  • classloader -t 展示类加载器的继承树

5. monitor/watch/trace相关

5-1. monitor 方法执行监控

5-2. watch 方法执行数据观测

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

5-4. stack 输出当前方法被调用的调用路径

5-5. tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同时间下的调用进行观测

6. 后台异步任务

7. web console

Java诊断工具 | Arthas

原文:https://www.cnblogs.com/Serenity1994/p/12495303.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!