编程语言
首页 > 编程语言> > jstack跟踪Java堆栈信息

jstack跟踪Java堆栈信息

作者:互联网

1、简介

       jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具。线程快照一般被称为threaddump或者javacore文件,是当前Java虚拟机中每个线程正在执行的Java线程、虚拟机内部线程和可选的本地方法堆栈帧的集合。对于每个方法栈帧,将会显示完整的类名、方法名、字节码索引(bytecode index,BCI)和行号。生成的线程快照可以用于定位线程出现长时间停顿的原因,比如:线程间死锁、死循环、请求外部资源被长时间挂起等等。

2、jstack命令参数

命令语法:

jstack [options] pid

命令参数说明:

option:jstack命令的可选参数。如果没有指定这个参数,jstack命令会显示Java虚拟机当前时刻的线程快照信息,如下图

 

 

 

-F参数

如果Java虚拟机进程由于进程挂起而没有任何响应,那么可以使用-F参数(仅在Oracle Solaris和Linux操作系统上游戏)强制显示线程快照信息。

-l参数

如果使用-l参数,除了方法栈帧以外,jstack命令还会显示关于锁的附加信息,比如属于java.util.concurrent的ownable synchronizers列表。

-m参数

如果使用-m参数,jstack命令将显示混合的栈帧信息,除了Java方法栈帧以外,还有本地方法栈帧。本地方法栈帧是C或C++编写的虚拟机代码或JNI/native代码。

3、jstack 分析 CPU 问题

top -Hp pid来找到 CPU 使用率比较高的一些线程

将排在前面的线程 PID 转换成十六进制

printf ‘%x\n’ pid得到 nid

打印 Java 线程栈的信息

jstack pid |grep ‘nid’ -C5 –color

jstack 24076| grep 5e0d -A30

 

当然更常见的是我们对整个 jstack 文件进行分析,通常我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用说了。我们可以使用命令

cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c

标签:Java,虚拟机,jstack,快照,线程,堆栈,参数
来源: https://www.cnblogs.com/uestc2007/p/16310310.html