背景介绍:大数据环境下有时候需要分析写的代码合不合理是个非常复杂的活,也许本地跑的好好的,上了集群后,反而代码有问题,浪费很多资源
实践环节:
假如下边有三个线程,我们启动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)]](https://code84.com/wp-content/uploads/2022/09/ab8fcd51e2334dadae1c30e14eb7441d.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版权协议,转载请附上原文出处链接和本声明。