jstack命令

    打印Java线程栈信息。

概要

jstack [options] pid

jstack [options] executable core

jstack [options] [server-id@] remote-hostname-or-IP

options 命令行选项。

pid Java进程Id。

executable 产生core dump的java可执行指令

core 栈信息打印核心文件

remote-hostname-or-IP 远程服务器主机名或IP地址。

server-id 多个调试服务器在同一个远程主机上运行时使用的可选唯一标识。

描述

    jstack用于生成java虚拟机当前时刻的线程快照。只要可达,就会打印Java frame,类全名,方法名,字节码索引(BCI)以及行号。使用-m*选项,jstack命令用程序计数器打印所有线程的Java和本机帧。对于本地帧会打印可达的最靠近PC的native symbol。c++打乱的名称不会被恢复。为了恢复C++名称,可以通过改命令输出到管道c++filt。在64位JVM上,可能需要使用-J-d64*选项。

    从上面描述可以看出,jstack命令主要用来查看Java线程的调用栈,以分析线程问题(如死锁,高cpu等)。

选项

-F 当jstack [-l]pid无响应时使用。强制dump。一般情况不需要使用。

-l 长列表。打印关于锁的列表信息。会使得JVM STW时间变长,一般不使用。

-m 打印Java和本地C/C++栈帧。一般不使用。已知bug: -m选项不能在远程模式下生效。

-h|-help 打印帮助信息。

参考