zoukankan      html  css  js  c++  java
  • JVM的监控工具之jstack

    参考博客:https://www.jianshu.com/p/213710fb9e40

    jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈 的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,

    如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。
    线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源

    首先jps -l 查看java进程:

    接着再用jstack 21028 查看线程状态

    发现诊断到了死锁:

    死锁演示代码如下

    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();
            }
        }
    }
    

      

  • 相关阅读:
    第二阶段工作总结 07
    第二阶段工作总结 06
    学习进度条 第十三周
    第二阶段 工作总结 05
    小水王2
    第二冲刺阶段 工作总结 04
    第二冲刺阶段 工作总结 03
    第二冲刺阶段 工作总结 02
    第二冲刺阶段 工作总结 01
    学弟进度条 第十二周
  • 原文地址:https://www.cnblogs.com/cheng21553516/p/11235432.html
Copyright © 2011-2022 走看看