您当前的位置:首页 > 计算机 > 编程开发 > Java

jstack 是 JDK 自带的线程堆栈分析工具

时间:12-14来源:作者:点击数:

jstack 是 jdk 自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。通过 jstack 命令可以获取当前进程的所有线程信息。每个线程堆中信息中,都可以查看到 线程ID、线程的状态(wait、sleep、running 等状态)、是否持有锁信息等

PWD:workspace pwd$ jstack -h
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

参数说明:

  • -l 长列表,打印关于锁的附加信息,例如属于 java.util.concurrent 的 ownable synchronizers 列表。
  • -F 当 jstack [-l] pid 没有相应的时候强制打印栈信息
  • -m 打印 java 和 native c/c++ 框架的所有栈信息.
  • -h | -help 打印帮助信息

pid 需要被打印配置信息的 java 进程 id,可以用 jps 查询。

jstack 找出占用 cpu 最高的堆栈信息

  1. 使用命令 top -p ,显示你的java进程的内存情况,pid 是你的 java 进程号,比如 4977
  2. 按 H,获取每个线程的内存情况
  3. 找到内存和 cpu 占用最高的线程 tid,比如 4977
  4. 转为十六进制得到 0x1371,此为线程id的十六进制表示
  5. 执行 jstack 4977|grep -A 10 1371,得到线程堆栈信息中 1371 这个线程所在行的后面 10 行
  6. 查看对应的堆栈信息找出可能存在问题的代码
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐