jstack命令简介

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

jstack命令参数

命令语法:

jstack [options] pid

命令参数说明:

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

  • pid:要打印配置信息的Java虚拟机的进程ID。

想要要获取运行的Java虚拟机进程的列表,可以使用ps命令(Linux系统中)或tasklist命令(Windows系统中),如果Java虚拟机进程没有在单独的docker实例中运行,可以使用jps命令。

option都有哪些参数呢?我们来看一下。

-F参数

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

比如:

-l参数

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

比如:

-m参数

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

比如:

在显示结果中,以星号为前缀的帧是Java方法栈帧,而不以星号为前缀的是本地方法栈帧。比如:

-h 和 -help

显示jstack命令的帮助信息。

结尾

虽然jstack命令已经推出很久并且使用频率比较搞,但它仍然是一个“实验性质的,并且没有技术支持的”(Experimental and Unsupported)工具,日后可能会被转正,也有可能在某个JDK版本中无声无息地消失。所以,且用且珍惜吧。

不过,我们还可以使用Thread.getAllStackTracesgetAll()方法,获取Java虚拟机中所有线程的StackTraceElement对象,进而获得所有线程栈帧信息。

最后,谢谢你这么帅,还给我点赞关注

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

Java的jstack命令使用详解的更多相关文章

  1. Java的jinfo命令使用详解

    jinfo命令简介 jinfo(Java Virtual Machine Configuration Information)是JDK提供的一个可以实时查看Java虚拟机各种配置参数和系统属性的命令行 ...

  2. Java的jstat命令使用详解

    jstat命令简介 jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的一个可以监控Java虚拟机各种运行状态信息的命令行工具.它 ...

  3. Java的jmap命令使用详解

    jmap命令简介 jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具.除此以外,jmap命令还可以查 ...

  4. JAVA命令参数详解

    JAVA命令参数详解 JAVA命令详解 结构 说明 Java 和 OldJava JIT 选项 另请参阅 结构 java [ options ] class [ argument ... ] java ...

  5. JAVA 命令参数详解System.setProperty(

    JAVA 命令参数详解: 1.-D<name>=<value> set a system property  设置系统属性. java -D参数简化加入多个jar java命令 ...

  6. Java开发利器Myeclipse全面详解

    Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...

  7. Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  8. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  9. java 关键字final static native详解

    java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...

随机推荐

  1. 直播流媒体ums

    准备工具 下载  UltrantMediaServer服务器 FlashMediaLiveEncoder测试直播工具 第一步 安装 UltrantMediaServer服务器 第二步 打开网也输入   ...

  2. MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)

    一.缓存机制 使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显. 1.缓存原理:Map ■ 查询时,先从缓存区查询:找到,返回 ...

  3. 一次Kafka内存泄露排查经过

    一.现象 服务部署后内存总体呈上升趋势 二.排查过程 通过go tool pprof收集了三天内存数据 2月11号数据: 2月14号数据: 2月15号数据: 可以看到newPartitionProdu ...

  4. Solution -「SV 2020 Round I」「SRM 551 DIV1」「TC 12141」SweetFruits

    \(\mathcal{Description}\)   link.   给定 \(n\) 个水果,每个结点可能有甜度 \(v_i\),或不甜(\(v_i=-1\)).现在把这些水果串成一棵无根树.称一 ...

  5. C#颠倒字符串

    本函数实现了反转字符串的功能,例如字符串"张赐荣",反转后得到"荣赐张". public static string ReverseText(this stri ...

  6. 深入MySQL(二):MySQL的数据类型

    前言 对于MySQL中的数据类型的选择,不同的数据类型看起来可能是相同的效果,但是其实很多时候天差地别. 本章从MySQL中的常用类型出发,结合类型选择的常见错误,贯彻MySQL的常用类型选择. 常用 ...

  7. 上架打包错误:error itms-90086

    这是一个很纠结的错误 大家第一反应肯定是 赶紧去看看 位数是否设置  然后发现没有问题  就开始懵逼了 (比如我) 然而无意看到了一个人写的简书 这个人在 Overflow 找到了一个答案 比如你选择 ...

  8. pytest--pytest基本介绍

    pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高 效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰富 ...

  9. 学习OMO游戏管理驾驶舱的设计

    2019年第1季度,Smartbi帮助合作伙伴开发了一个销售管理沙盘游戏(OMO),在第一个版本中主要精力放在游戏的后台过程逻辑上(基于电子表格的报表和回写能力),并没有把Smartbi的最强项--数 ...

  10. 【C# IO 操作 】开篇 IO命名空间的解析

    图片模板下载 System.IO命名空间类分为:文件.驱动 .目录.路径.流.比特率流的操作 驱动类:比较简单,所以就不区分静态和实例操作类,所有的操作合并在DriverInfo类中 路径类:比较简单 ...