7.3CPU飙高或100%快速定位

样例代码:

/**
 * 运行此代码,cpu会飙高
 */
public class Math {

    public static final int initData = 999;

    public int compute() {  //一个方法对应一块栈帧内存区域
        int a = 1;
        int b = 2;
        int c = (a + b) * 10;
        return c;
    }

    public static void main(String[] args) {
        Math math = new Math();
        while (true){
            math.compute();
        }
    }
}

1)直接用top 命令查看cpu 100%的是哪个进程

2)使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程id
在这里插入图片描述

3)按H,获取每个线程的内存情况
在这里插入图片描述
3,找到内存和cpu占用最高的线程tid,比如19664

4,转为十六进制得到 0x4cd0,此为线程id的十六进制表示

5,执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法

在这里插入图片描述

6,查看对应的堆栈信息找出可能存在问题的代码

总结:

​ 先用top查看cpu 100% 的进程,在用top -p 进程id 查看单个进程的详情,在按H查看具体哪个线程是cpu最高的,在通过 jstack 进程Id |grep -A 10 线程id(16进制),定位具体类的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹水相峰

你的打赏是对我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值