JVM的監控工具之jstack

參考博客:https://www.jianshu.com/p/213710fb9e40java

jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照(通常稱爲threaddump或者javacore文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧 的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,ide

如線程間死鎖、死循環、請求外部資源致使的長時間等待等都是致使線程長時間停頓的常見緣由。
線程出現停頓的時候經過jstack來查看各個線程的調用堆棧,就能夠知道沒有響應的線程到底在後臺作些什麼事情,或者等待着什麼資源this

首先jps -l 查看java進程:線程

接着再用jstack 21028 查看線程狀態blog

發現診斷到了死鎖:進程

 

死鎖演示代碼以下資源

public class DeadLockTest {
    /**
     *線程死鎖等待演示
     */
    static class SynAddRunalbe implements Runnable{
        int a,b;
        public SynAddRunalbe(int a,int b){
            this.a=a;
            this.b=b;
        }
        @Override
        public void run(){
            synchronized(Integer.valueOf(a)){
                synchronized(Integer.valueOf(b)){
                    System.out.println(a+b);
                }
            }
        }
    }
    public static void main(String[]args){
        for(int i=0;i<100;i++){
            new Thread(new SynAddRunalbe(1,2)).start();
            new Thread(new SynAddRunalbe(2,1)).start();
        }
    }
}
相關文章
相關標籤/搜索