美文网首页
jstack Java堆栈跟踪工具

jstack Java堆栈跟踪工具

作者: SlowGO | 来源:发表于2019-01-10 15:28 被阅读0次

jstack(stack trace) 用于生成虚机当前的线程快照,线程快照就是每个线程正在执行的方法堆栈的集合。

生成线程快照的目的就是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源等。

命令格式:

jstack 选项 进程ID

选项说明:

选项 作用
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++堆栈

文档:

https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html

示例:

$ jstack 1409
image

可以看到线程ID、状态、等待的资源等信息。

死锁示例:

public class DeadlockDemo {
    public static void main(String[] args) {

        DieLock d1 = new DieLock(true);
        DieLock d2 = new DieLock(false);
        Thread t1 = new Thread(d1);
        Thread t2 = new Thread(d2);
        t1.start();
        t2.start();
    }
}

class MyLock {
    public static Object obj1 = new Object();
    public static Object obj2 = new Object();
}

class DieLock implements Runnable {
    private boolean flag;

    DieLock(boolean flag) {
        this.flag = flag;
    }

    public void run() {
        if (flag) {
            while (true) {
                synchronized (MyLock.obj1) {
                    System.out.println(Thread.currentThread().getName() + "....if...obj1...");
                    synchronized (MyLock.obj2) {
                        System.out.println(Thread.currentThread().getName() + ".....if.....obj2.....");

                    }
                }
            }
        } else {
            while (true) {
                synchronized (MyLock.obj2) {
                    System.out.println(Thread.currentThread().getName() + "....else...obj2...");
                    synchronized (MyLock.obj1) {
                        System.out.println(Thread.currentThread().getName() + ".....else.....obj1.....");

                    }
                }
            }
        }

    }
}

运行后会锁死,查看线程状况:

# 找出死锁示例的线程ID
$ jps

# 查看线程信息
$ jstack
image

可以看到死锁信息了。

相关文章

  • jstack(Java Stack Trace)简介

    jstack(Java Stack Trace)简介 jstack:Java进程中线程的堆栈信息跟踪工具。功能简介...

  • Java命令: jstack

    jstack jstack是java虚拟机自带的一种堆栈跟踪工具。 功能 jstack用于生成java虚拟机当前时...

  • jstack Java堆栈跟踪工具

    jstack(stack trace) 用于生成虚机当前的线程快照,线程快照就是每个线程正在执行的方法堆栈的集合。...

  • jvm线程日常状态查看

    1.查看所有java进程jps2.查看某java进程的信息jinfo pid3.java堆栈跟踪工具jstack ...

  • jstack - 堆栈跟踪工具

    jstack一般用来查看指定线程(比如CPU较高、内存占用较高)的堆栈、查看死锁的原因。打印对指定进程的堆栈信息:...

  • JVM性能调优监控工具之jstack

    二、 jstack 此命令是为Java进程或核心文件或远程调试服务器打印Java线程的堆栈跟踪。jstack可以同...

  • Java工具初探一(jps和jstack)

    Java工具初探一(jps和jstack) 本文关键字:jps,jstack,堆栈信息,进程号获取 今天在学习悟空...

  • JVM回顾(一)

    1 查看JVM中运行的进程信息 jps jps -m 2 打印JAVA进程堆栈跟踪信息命令 jstack 命令示例...

  • jvm 性能调优工具之 jstack

    概述 jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。 J...

  • jvm 性能调优工具之 jstack

    概述 jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。 J...

网友评论

      本文标题:jstack Java堆栈跟踪工具

      本文链接:https://www.haomeiwen.com/subject/eosarqtx.html