1. JDK自带的命令行工具

java 测试计划线程号 java线程分析工具_应用程序

2.JDK自带的可视化工具

1.jconsole
  1. 启动:双击jdk/bin/jconsole.exe
  2. 选择要诊断的进程,建立连接
  3. “概述”页签显示的是整个虚拟机主要运行数据的概览,其中包括“堆内存使用情况”、“线程”、“类”、“CPU使用情况”4种信息的曲线图,这些曲线图的后面“内存”、“线程”、“类”页签的信息汇总。
  4. 内存监控(“内存”页签) 相当于可视化的jstat命令,可查看不同内群不同分区使用量,可手动执行GC
  5. 线程监控,相当于可视化的jstack命令,可查看每个线程的状态、堆栈、阻塞总数(线程处于BLOCKED的次数)、等待总数(线程处于WAITING或TIMED_WAITING的次数),可检测死锁
2. jvisualvm

功能(可按需下载插件):

  1. 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
  2. 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)
  3. dump以及分析堆转储快照(jmap、jhat)
  4. 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法
  5. 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
  6. 其他插件的无限可能

使用

  • 启动:双击jdk/bin/jvisualvm.exe
  • 按需选择安装插件(工具-插件)
  • 选择进程
  • 生成、浏览堆转储快照
  • 方式一:右键单击应用程序节点,选择“堆Dump”,生成堆转储快照
  • 方式二:双击应用程序节点以打开应用程序标签,然后在“监视”标签中单击“堆Dump”
  • thread dump

3. Arthas(阿尔萨斯)

1. 介绍

arthas基础教程

arthas进阶教程

arthas-boot是arthas的启动程序,可以通过命令java -jar arthas-boot.jar --target-ip 0.0.0.0来启动arthas,启动后,会列出所有的java进程,通过输入进程序号并回车来选择想要诊断的进程。
选择好进程后,可通过以下命令来诊断

2. 使用
  1. 启动
    (在jar包所在文件夹下执行)java -jar arthas-boot.jar
    选择要诊断的进程
    可访问给定ip+端口在网页中操作。 端口3658、8563都可以(但网页中不如命令行窗口流畅……)
  2. 使用1)中的命令进行诊断

4.诊断实例

1.死锁
  1. 使用arthas
    执行jvm命令可看到当前死锁的线程数

    thread -b(找出当前阻塞其他线程的线程)命令执行结果
下图含义:Thread-0在尝试锁@7480cele对象时阻塞了,这个对象的锁被Thread-1持有。Thread-0锁了对象@7d8daac1,但这个对象锁被持有,也导致了另一个线程被阻塞。
 ![在这里插入图片描述]()

通过thread --state BLOCKED可以看到哪些线程被阻塞

java 测试计划线程号 java线程分析工具_应用程序_02

  1. 使用jstack
    执行命令:jstack -l pid 或者 jstack pid,执行该命令会打印full dump。结果中的部分内容如下,可以看到线程1和线程0发生死锁
  2. jconsole
  3. jvisualvm

    生成线程dump:
2. cpu消耗大
  1. arthas
    执行thread命令(结果默认按cpu消耗大小来排序)

    可以看到ID为12的线程耗费了100%的cpu。

通过命令thread [ID]可以查看指定线程的堆栈

java 测试计划线程号 java线程分析工具_java 测试计划线程号_03


通过分析线程堆栈即可得知是什么操作、哪个方法消耗了cpu。上图例就是在Arthas的cpuHigh()

  1. jstack
    在linux中,可使用top命令和shift+h获得占cpu高的进程和线程,并用jstack [pid]来分析对应的线程。

在windows中,可通过任务管理器查看占cpu高的进程,但查看线程需借助别的工具。

3. 反编译

arthas
可通过jad [class]来反编译指定类,用来判断当前执行的代码是否是自己想要执行的代码。

4. trace

arthas

通过trace [class] [method]来跟踪统计方法耗时,可用于查出具体是哪个方法耗时久

java 测试计划线程号 java线程分析工具_死锁_04