记录工作点滴。
环境linux。
1.模拟问题重现
/**
* linux中写一个Test.java
*/
public class Test {
public static void main(String[] args) {
int a = 0;
while (true) {
a = a * 10;
}
}
}
#linux 中编译,运行该类
>javac Test.java
>java Test
2.查消耗cpu最高的进程PID
>top -c #显示整个命令行而不只是显示命令名 ,查找消耗CPU较大的进程PID
#查询结果如下图,PID=23209的进程消耗CPU最多
3.根据PID查出消耗cpu最高的线程号
>top -Hp 23209 ,显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序
#查询结果如下图,PID=23210的线程消耗CPU最多
4.十进制线程号转为十六进制
网上随便找一个在线的“十进制线程号转为十六进制” ,转换结果如下图,23210转为16进制是5aaa
5.执行命令,导出进程快照
>jstack -l 23209 > 23209.stack
然后执行,grep命令,看线程5aaa做了什么
>cat 23209.stack |grep '5aaa'
最终结果如下图,可以看到定位出Test.java文件的第五行有问题
6.根据提示修改代码
>vim Test.java #进入编辑
>set nu #显示行号
如果是系统程序部署到linux中,在idea中快捷键shift + shift 定位类名,ctrl + g定位出行号