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

本文探讨了在大数据环境下,如何通过top、jstack和十六进制转换工具定位Java程序中消耗资源过高的线程。通过实例演示了如何使用命令行工具追踪CPU使用率和代码位置,以帮助开发者解决集群部署中的代码问题。
摘要由CSDN通过智能技术生成

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

实践环节
假如下边有三个线程,我们启动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/(在线进制转换)
在这里插入图片描述
对应代码位置
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北漂的阿狸

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值