背景介绍:大数据环境下有时候需要分析写的代码合不合理是个非常复杂的活,也许本地跑的好好的,上了集群后,反而代码有问题,浪费很多资源
实践环节:
假如下边有三个线程,我们启动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();
}
程序启动后
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/(在线进制转换)
对应代码位置
结尾:
其实还有很多更简单的工具,一般大厂都有,这个命令可以作为自己的探索兴趣,了解就好