假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位

下面我写一个死循环的代码,然后演示一遍如何去定位问题

/**
 * 这个案例为了演示cpu很高时候 如何快速定位
 */
public class CpuTest {
    public static void main (String[] args) throws InterruptedException {
        while (true) {
            System.out.println(new Random().nextInt(1010101010));
        }
    }
}

为了节省时间 我没有等他运行很久就去截图了,所以可能那些性能指标不是很离谱哈,只要是提供定位思路哈

第一步、用top命令找出占cpu占比最高的 记录下PID

在这里插入图片描述

采用 jps 进一步定位

在这里插入图片描述
找到当前正在运行的进程号

定位到具体的线程或代码 ps -mp 进程 -o THREAD,tid,time
  1. -m 显示所有的线程
  2. -p pid进程使用cpu的时间
  3. -o 该参数后是用户自定义的格式

在这里插入图片描述
定位到了具体的线程

将需要的线程ID转换为16进制格式(英文小写格式)

在这里插入图片描述

jstack 进程号 | grep tid 线程号(16进制) -A60

在这里插入图片描述

下面就能找到错误的代码

猜你喜欢

转载自blog.csdn.net/weixin_45844836/article/details/112462943