jstack
介绍
jstack主要用来查看Java进程内的线程堆栈信息。
注:jstack可以非常方便的做java进程的thread dump,是thread dump的首选方式。
使用
安装
jstack是jdk自带的工具,安装jdk之后,在jdk安装目录下的 bin 文件夹中。如果用apt-get 等工具自动安装jdk时,通常会为jstack创建路径为"/usr/bin/jstack"的软链接以方便使用。
查看帮助信息
可以通过执行jstack 或者 jstack -h来查看帮助信息:
$ jstack
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
使用场景
连接到运行中的进程
"jstack pid" --- pid为进程号,可以通过jps或者ps命令查找到。
命令执行成功则堆栈信息打印在控制台,可以通过 "jstack 4048 > core.dump" 这种方式将内容输出文件。多次dump时可以使用 "jstack 4048 >> core.dump" 将多次dump的内容添加到指定文件。
连接到挂起的进程
当进程挂起(hung)时,上面的命令可能没有响应,这时需要使用 "-F" 参数来强制执行thread dump: "jstack -F 4048"
分析已有的core文件
如果已经有java程序崩溃时生成的core文件,那么可以用jstack命令从core文件中提取thread dump信息。
连接到远程调试服务器
需要和 jsadebugd 工具一起使用。
注:未能测试成功,后续再研究
命令行参数
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有栈信息.
-h | -help 打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询
相关资料
英文资料:
中文资料: