监控多线程案例

1. 一天,程序员小灰失恋喝醉酒,写了一段死循环,然后若无其事地跑去睡觉了

public class Main {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println(Thread.currentThread().getName() + "跑起来!!!");
                }
            }
        });
        t1.setName("测试线程卢本伟1号");
        t1.start();
    }
}

2. 本线程结果

3. 第二天,测试部的小黄查看任务管理器,发现有个Java线程消耗cpu激增

4. 小黄屁颠屁颠地找到主程小黑,让小黑找到问题所在,大黑根据上面截图,发现java.exe的pid是15564,然后打开process exporer工具,找到了该 "进程"

5. 双击,打开改线程的属性界面,找到了cpu消耗最高的 "线程" TID是11660(10进制)

6. 接着win + r > calc > 打开计算器,换算11660(10) > 2D8C(16),即0x2D8C(16进制自带0x)

扫描二维码关注公众号,回复: 4940331 查看本文章

7. 接着,小黑打开了jdk > bin > j visual VM,找到了pid15564,也就是我们找到的进程

 

8. 然后点开dump打印线程运行情况

9.在dump里,我们找到了nid=0x2d8c的线程,这就是我们一步一步定位,找到的目标,而通过下图的分析,我们可找到Main类第9行代码

 10. 打开项目,找到了这行代码,问题的源头!!!

猜你喜欢

转载自blog.csdn.net/qq_38056704/article/details/85764009