38、JVM实战:工具:jstack

本文详细介绍了Java虚拟机线程快照工具jstack,包括其核心功能、语法参数及使用场景。学习如何使用jstack生成线程快照,定位线程长时间停顿、死锁、死循环等问题,以及分析程序崩溃或hung状态的根本原因,是Java性能调优和故障排查的必备技能。

26.6–工具–jstack


1、介绍

1、 用于生成java虚拟机当前时刻的线程快照;
2、 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合;
3、 生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等;
4、 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源;
5、 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题;
6、 jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的javastack和nativestack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的;

2、语法

2.1、格式

jstack [ option ] pid

 

2.2、参数说明

2.2.1、option

-F当正常输出请求不被响应时强制输出线程栈堆

-l除线程栈堆外显示关于锁的附加信息

-m如果调用本地方法的话可以显示c/c++的栈堆

2.3、测试

jstack -l 10088