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对象,进而获得所有线程栈帧信息。

作者:万猫学社 
出处:万猫学社 - 博客园

​Java的jstack命令使用详解​相关推荐

  1. Java的jstack命令使用详解

    jstack命令简介 jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具.线程快照一般被称为th ...

  2. java jstack使用_JAVA语言之JVM 中jstack命令使用详解

    本文主要向大家介绍了JAVA语言之JVM 中jstack命令使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java程序问题定位时线程栈信息是一个重要线索,如下: " ...

  3. Java的jmap命令使用详解

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

  4. java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty

    大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...

  5. java linux tracert_Linux系统中tracert命令使用详解

    Linux系统中Tracert命令用来显示数据包到达目标主机是所经过的路径.下面由学习啦小编为大家整理了linux系统中tracert命令使用详解,希望对大家有帮助! Linux系统中tracert命 ...

  6. linux java 创建目录结构_linux mkdir命令创建目录详解

    首页 > Linux教程 > 常用命令 > mkdir 创建目录 linux mkdir命令创建目录详解 linux中mkdir命令可以实现在指定位置创建文件夹或目录.要创建文件夹或 ...

  7. Java开发常见面试题详解(并发,JVM)

    预览 并发 问题 详解 请谈谈你对volatile的理解 link CAS你知道吗? link 原子类Atomiclnteger的ABA问题谈谈?原子更新引用知道吗? link 我们知道ArrayLi ...

  8. Java开发常见面试题详解(JVM)_2

    Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...

  9. Linux top命令参数详解

    Linux top命令参数详解 生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU.内存.磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占 ...

最新文章

  1. L1相对于L2较稀疏的原因
  2. boost::posix_time模块实现计算时间段的测试程序
  3. python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍
  4. 一步一步实现自己的模拟控件(6)——控件树及控件区域
  5. 《c语言从入门到精通》看书笔记——第14章 文件
  6. MySQL之 XtraBackup 备份
  7. mysql考试会自动给我们放好路径吗_Jsp struts mysql实现的在线考试系统项目源码附带视频运行教程...
  8. STM32矩阵键盘的实现原理
  9. Lifelong learning with dynamically expandable networks - 使用动态可扩展网络的终身学习-不完全记录
  10. XP Embedded 蓝屏错误 Stop 0x0000007B
  11. 泛微oa流程表单之取值弹窗
  12. android常用词汇带音标,高中那个背英语单词的APP好3500乱序带音标_背单词安卓软件...
  13. 蓝桥杯2017省赛——外星日历(Java)
  14. python爬虫高级知识兼实例汇总-中华英才网
  15. 【Java面试题】有三个线程 t1,t2,t3,怎么确保它们按顺序执行?
  16. ctype.h 详解
  17. STM32CubeIDE开发(二十二), stm32的RS485/232串口通信开发要点
  18. HTML <i> 标签
  19. 64位环境中使用SQL查询excel的方式解决
  20. 西门子工业数据桥WINCC IDB 7.4sp1 update1

热门文章

  1. 关于单引号单引号还是双引号的概述
  2. 医学图像分割论文学习--利用深度学习和人脑医学成像进行多类疾病检测(2023)
  3. 人脸检测:在公共交通场所监控中起什么样的作用?
  4. Macaca实战之一:环境搭建(亲测好用)
  5. JavaScript语言精粹-读书笔记(1)
  6. iOS 图片设置为圆角矩形,圆形等
  7. [网络安全学习篇58]:PHP代码注入
  8. TIFF World File (TFW)格式解析
  9. 餐饮管理系统开源java_java课程设计餐饮管理系统
  10. 华为防火墙配置流量根据链路带宽负载分担