• 线程运行诊断


    线程运行诊断**

    定位
    用top定位哪个进程对cpu的占用过高

    ps H -eo pid,tid,%cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高)

    jstack 进程id 可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号

    要先将32665转为16进制,即0x7f99,定位到了具体的代码

    /**
     * 演示 cpu 占用过高
     */
    public class Demo1_16 {
    
        public static void main(String[] args) {
            new Thread(null, () -> {
                System.out.println("1...");
                while(true) {
    
                }
            }, "thread1").start();
    
    
            new Thread(null, () -> {
                System.out.println("2...");
                try {
                    Thread.sleep(1000000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "thread2").start();
    
            new Thread(null, () -> {
                System.out.println("3...");
                try {
                    Thread.sleep(1000000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "thread3").start();
        }
    }
    
    

    案例2:程序运行很长时间没有结果

    运行java程序,很长时间没有结果,使用

    jstack 32752

    在最后可以看到出现了死锁

    /**
     * 演示线程死锁
     */
    class A{};
    class B{};
    public class Demo1_3 {
        static A a = new A();
        static B b = new B();
    
    
        public static void main(String[] args) throws InterruptedException {
            new Thread(()->{
                synchronized (a) {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (b) {
                        System.out.println("我获得了 a 和 b");
                    }
                }
            }).start();
            Thread.sleep(1000);
            new Thread(()->{
                synchronized (b) {
                    synchronized (a) {
                        System.out.println("我获得了 a 和 b");
                    }
                }
            }).start();
        }
    
    }
    
    
  • 相关阅读:
    第一阶段意见评论
    《大道至简》阅读笔记03
    大二下第十二周学习笔记
    《大道至简》阅读笔记02
    课上练习—单词统计
    大二下第十一周学习笔记
    《大道至简》阅读笔记01
    《人月神话》阅读笔记03
    大二下第十周学习笔记
    团队项目前期冲刺-10
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11999927.html
Copyright © 2020-2023  润新知