快速入门Java线程栈分析

更新时间:

本文将演示如何通过ATP的Java线程栈分析功能,分析Java应用中线程的运行情况。

1. 生成数据源,上传到ATP

a. 用户可以通过JDK中自带的jstack命令创建Java应用的线程快照,如下:

# 生成线程快照并输出到 jstack.log
$ jstack <进程号> > jstack.log

b. 创建成功后,将文件上传至ATP并分析。

参考:2.2 生成Java栈文件

2. 使用ATP线程栈分析

下面以 spring-petclinic 应用为例,在这个项目启动后创建线程栈快照并上传至ATP进行分析。

以下是各视图的基本介绍。

基本信息

基本信息视图中包含:

  • 快照生成的时间(非上传时间)

  • JVM 版本信息

  • JNI 引用数量

  • 线程死锁数量

同时会按照线程状态和类型对所有线程作分类。

image

线程信息

线程信息视图中包含所有线程的信息:如栈,CPU 等。注意有些信息(如 CPU,Elapsed)只有高版本的 JDK 中才会输出。

用户可以通过线程名、线程 id 等字段进行查找。

image

线程池

线程池视图基于线程名对所有线程作分类,并按状态统计数量分布,可以用于协助排查线程泄漏相关的问题。

image

方法热度

方法热度视图使用火焰图可视化所有的线程栈,帮助开发者分析应用中可能存在的热点行为。

请注意火焰图是按照栈的数量进行聚合,越宽不一定代表是热点方法,比如很多线程阻塞在同一个Java方法上是正常的现象。

image

3. 结论

通过ATP Java线程栈分析功能,可以帮助开发者分析应用中线程的运行情况。