快速入门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 引用数量

  • 线程死锁数量

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

线程信息

线程信息视图中包含所有线程的信息:

  • CPU 等

说明

部分信息(如 CPU,Elapsed)只有在高版本的 JDK 中才会输出。

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

线程池

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

方法热度

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

说明

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

3. 结论

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