监控多线程案例

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)

 

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

 

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值