分析CPU占用最多的JAVA代码位置

背景介绍:大数据环境下有时候需要分析写的代码合不合理是个非常复杂的活,也许本地跑的好好的,上了集群后,反而代码有问题,浪费很多资源

实践环节
假如下边有三个线程,我们启动java程序后,如何定位那个代码需要更多的资源呢?

public static void main(String[] args) throws InterruptedException {
        new Thread(null,()->{
            while(true){}
        },"thread1").start();
        new Thread(null,()->{
            while(true){}
        },"thread2").start();
        new Thread(null,()->{
            while(true){}
        },"thread3").start();
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BYY5RdeC-1653134781846)(https://secure2.wostatic.cn/static/f14d8ZfFDZVWGCFEUSwJfN/image.png)]

程序启动后
1、用top命令找到对CPU使用率最多的进程名
在这里插入图片描述
2、用下面的命令找到对应进程CPU使用率最高的线程

H表示树妆结构

p表示按照CPU占用率排序

top -Hp  565017(主进程ID)

在这里插入图片描述
3、用jstack + 进程ID找到出问题的那条代码,注意用tid找到这条线程的位置。

由于jstack输出的是十六进制的信息,因此需要将线程ID(十进制)转换为(十六进制)

如:565039转换为89f2f

https://tool.oschina.net/hexconvert/(在线进制转换)
在这里插入图片描述
对应代码位置
在这里插入图片描述

结尾:
其实还有很多更简单的工具,一般大厂都有,这个命令可以作为自己的探索兴趣,了解就好


版权声明:本文为weixin_44272011原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。