• Java的jstack命令使用详解


    jstack命令简介

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

    jstack命令参数

    命令语法:

    jstack [options] pid
    

    命令参数说明:

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

    万猫学社.png

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

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

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

    -F参数

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

    比如:

    万猫学社.png

    -l参数

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

    比如:

    万猫学社.png

    -m参数

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

    比如:

    万猫学社.png

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

    万猫学社.png

    -h 和 -help

    显示jstack命令的帮助信息。

    结尾

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

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

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

    微信公众号:万猫学社

    微信扫描二维码

    关注后回复「电子书」

    获取12本Java必读技术书籍

  • 相关阅读:
    oschina 终端/远程登录
    oschina文档/文本编辑
    oschinaIM/聊天/语音工具
    oschina浏览器开发
    oschina P2P/BT开源软件
    oschina图形和图像工具开源软件
    java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
    java之jvm学习笔记三(Class文件检验器)
    手把手教popupWindow从下往上,以达到流行效果
    java实现代理domino web邮件下载
  • 原文地址:https://www.cnblogs.com/heihaozi/p/16034375.html
Copyright © 2020-2023  润新知